/// <reference types="node" />
import * as TCP from 'net';
import { BaseAddon, RecallFunctionList, RecallFunction } from 'pao-aop';
import { SocketServer } from '../net/socket';
import { ServiceInfo, BaseService } from '../base/index';
/**
 * TCP设备
 * @description 支持TCP/IP的设备
 */
export declare class SocketDevice extends BaseAddon {
    /** 设备ID */
    deviceID?: string;
    /** 套接字 */
    socket?: TCP.Socket;
    /** 回调函数列表 */
    recallFunctionList?: RecallFunctionList;
    /**
     * 发送消息
     * @param message 消息
     * @param returnFunctionID 消息命令
     * @param timeout 超时
     * @param checkToSend 发送前的检查函数
     * @returns 命令返回Promise
     */
    sendMessage?<T>(message: string | Buffer, returnFunctionID?: any, timeout?: number, timeoutCheckBreak?: number): Promise<T>;
    /**
     * 发送数据
     * @param deviceID 设备ID
     * @param data 数据
     */
    sendDataToSocket?(data: string | Buffer): void;
    /**
     * 处理接收数据
     * @param data 数据
     */
    onReceivedData?(data?: Buffer): void;
    /**
     * 处理错误
     * @param error 错误
     */
    onError?(error: any): void;
}
/**
 * Socket设备服务
 * @description 提供Socket设备与云端通讯的服务
 * @author pao
 */
export declare class SocketDeviceServer<T extends SocketDevice> extends SocketServer {
    /** 命令超时时间，默认为30秒 */
    commandTimeout: number;
    /**
     * 设备服务列表
     */
    private deviceServices;
    protected onCreateDevice?: () => T;
    protected onDeviceStart?: (device: T, socket: TCP.Socket) => void;
    start?(): void;
    setDeviceService(deviceServices: ServiceInfo[]): void;
    /**
     * 连接建立
     * @param socket 套接
     */
    onConnected?(socket: TCP.Socket): void;
    /**
     * 接收数据处理事件
     * @param device 设备ID
     * @param data 数据
     */
    onReceivedData?(device: T, data?: Buffer): void;
    /**
     * 异常时的处理
     * @param device 设备ID
     * @param error 错误
     */
    onError?(device: T, error?: any): void;
    protected getDeviceByName(deviceName: string): ServiceInfo;
}
/**
 * 基础设备服务
 * @description 所有设备服务的基类，实现了物联网设备服务接口
 * @author pao
 */
export declare class BaseDeviceService extends BaseService {
    /** 设备列表 */
    protected deviceList?: Map<string, SocketDevice>;
    /**
     * 连接设备
     * @param deviceID 设备ID
     */
    connectDevice?(newDevice: SocketDevice): void;
    /**
     * 断开设备
     * @param had_error 是否有错误
     */
    disconnectDevice?(deviceID: string, had_error: boolean): Promise<void>;
    /**
     * 事件: 有错误发生
     * @param error 错误
     */
    setErrorToDevice?(deviceID: string, error: Error): void;
    /**
     * 发送服务消息
     * @param message 消息
     * @param returnFunctionID 返回消息ID
     * @param timeout 超时（单位：毫秒，如果小于或等于0，表示不设置超时）
     * @param timeoutCheckBreak 超时检查时间间隔（单位：毫秒）
     */
    protected sendMessage?<T>(deviceID: string, message: string | Buffer, returnFunctionID?: any, timeout?: number, timeoutCheckBreak?: number): Promise<T>;
    /**
     * 根据设备ID获取设备
     * @param deviceID 设备ID
     */
    protected getDevice?(deviceID?: string): SocketDevice | undefined;
    /**
     * 回调函数列表是否为空
     * @param deviceID 设备ID
     */
    protected isRecallFunctionEmpty?(deviceID: string): boolean;
    /**
     * 获取回调函数
     * @param deviceID 设备ID
     * @param functionID 命令ID
     */
    protected getRecallFunction?(deviceID: string, functionID: any): RecallFunction;
    /**
     * 回调函数
     * @param deviceID 设备ID
     * @param functionID 命令ID
     * @param returnData 返回数据
     */
    protected recallFunction?(deviceID: string, functionID: any, returnData?: any): void;
    /**
     * 接收数据
     * @param deviceID 设备ID
     * @param data 数据
     */
    receiveData?(deviceID: string, data: Buffer): void;
    /**
     * AT命令到达
     * @param deviceID 设备ID
     * @param data 数据
     */
    protected onCommandReceived?(deviceID: string, data: string): void;
    /**
     * 数据到达
     * @param deviceID 设备ID
     * @param data 数据
     */
    protected onDataReceived?(deviceID: string, data: Buffer): void;
    /**
     * 设备错误
     * @param deviceID 设备ID
     * @param data 数据
     */
    protected onDeviceError?(deviceID: string, error: Error): void;
    /**
     * 事件: 设备连接
     * @param deviceID 设备ID
     */
    protected onDeviceConnected?(deviceID: string): void;
    /**
     * 事件: 设备断开
     * @param deviceID 设备ID
     */
    protected onDeviceDisconnected?(deviceID: string): void;
}
//# sourceMappingURL=index.d.ts.map