import EventEmitter from 'eventemitter3'; import { DGLAB_SOCKET_STATE, type DglabSocketCloseEvent, type DglabSocketConnectResult, type DglabSocketEventMap, type DglabSocketIncoming, type DglabSocketOptions, type DglabSocketSender, type DglabWebSocketLike } from './types'; export declare abstract class DglabSocketBase extends EventEmitter { protected readonly options: DglabSocketOptions; protected socket?: DglabWebSocketLike; private manualSender?; private activeConnect?; private connectTimer?; private cleanups; private currentState; private socketGeneration; constructor(options?: DglabSocketOptions); get state(): DGLAB_SOCKET_STATE; /** * 连接 SOCKET * @return Promise * */ connect(): Promise; /** * 获取连接结果 * targetId: 被控端 ID * */ protected abstract getConnectedResult(): DglabSocketConnectResult | undefined; /** * 发送协议数据 * @param args 协议版本对应的发送参数 * */ abstract send(...args: unknown[]): unknown; /** * 自定义协议数据发送(仅供使用自定义 Websocket 时使用) * @param sender 发送函数 * */ setSender(sender: DglabSocketSender): this; /** * 发送原始数据 * @param data 原始数据 */ sendRaw(data: unknown): void; /** * 发送协议帧 * @param frame 协议帧 */ sendFrame(frame: unknown): void; /** * 断开 SOCKET 连接 * @param code 关闭码 * @param reason 关闭原因 */ disconnect(code?: number, reason?: string): void; /** * 处理 WebSocket 打开事件 * @param event 事件 */ handleSocketOpen(event?: unknown): void; /** * 处理 WebSocket 消息 * @param data 消息 */ handleSocketMessage(data: DglabSocketIncoming): void; /** * 处理 WebSocket 关闭事件 * @param eventOrCode 事件或关闭码 * @param reasonValue 关闭原因 */ handleSocketClose(eventOrCode?: unknown, reasonValue?: unknown): void; /** * 处理 WebSocket 错误事件 * @param error 错误 */ handleSocketError(error: unknown): void; /** * 创建 WebSocket 实例 * @return WebSocket 实例 */ protected openSocket(): DglabWebSocketLike; /** * 设置 SOCKET 状态 * @param state 状态 */ protected setState(state: DGLAB_SOCKET_STATE): void; /** * 获取连接超时时间 * @return 连接超时时间 */ protected connectTimeout(): number; /** * 派发事件 * @param event 事件 * @param args 事件参数 * @return 是否派发成功 */ protected dispatch(event: K, ...args: Parameters): boolean; /** * 解决连接等待 * @param result 连接结果 */ protected resolveActiveConnect(result: DglabSocketConnectResult): void; /** * 拒绝连接等待 * @param error 错误 */ protected rejectActiveConnect(error: Error): void; /** * 处理 SOCKET 关闭事件 * @param _event 事件 */ protected onSocketClosed(_event: DglabSocketCloseEvent): void; /** * 处理协议消息 * @param text 文本消息 * @param raw 原始消息 */ protected abstract handleProtocolMessage(text: string, raw: DglabSocketIncoming): void; /** * 附加内部 WebSocket * @param socket WebSocket 实例 */ private attachInternalSocket; /** * 判断事件是否仍来自当前 SOCKET */ private isCurrentSocket; /** * 分离监听 */ private detachListeners; /** * 监听 WebSocket * @param socket WebSocket 实例 * @param eventName 事件名称 * @param listener 事件监听器 * @return 监听器清理函数 */ private listenSocket; }