import { DglabSocketBase } from '../base'; import { type DglabSocketConnectResult, type DglabSocketIncoming } from '../base/types'; import { V4Client } from './client'; import { V4Rpc } from './rpc'; import type { V4AppendPulseDataOperate, V4AppendPulseDataOptions, V4Channel, V4ClearOperateOptions, V4DevicesGetResult, V4OperateOptions, V4SendOptions, V4SendPromise } from './types'; export declare class DglabSocketV4 extends DglabSocketBase { private _targetId?; private readonly clientMap; readonly rpc: V4Rpc; private serverPingTimer?; private missedServerPongs; /** * 获取被控端 ID * @return string | undefined */ get targetId(): string | undefined; /** * 获取已接入被控端 clientId 集合 * @return string[] */ get clientIds(): string[]; /** * 获取已接入被控方列表 * @return V4Client[] */ get clients(): V4Client[]; /** * 获取指定被控方连接 * @param clientId 被控方 ID * @return V4Client | undefined */ getClient(clientId: string): V4Client | undefined; /** * 请求最新设备列表 * @param clientId 被控端 ID * @return Promise */ requestDevices(clientId: string): Promise; /** * 发送协议数据 * @param clientId 被控方 ID * @param data 数据 * @param options 选项 * @return V4SendPromise */ send(clientId: string, data: TData, options?: V4SendOptions): V4SendPromise; /** * 检查被控方连接是否正常 * @param clientId 被控方 ID * @param options 选项 * @return V4SendPromise */ ping(clientId: string, options?: V4SendOptions): V4SendPromise; disconnect(code?: number, reason?: string): void; /** * 增加强度(相对) * @param clientId 被控方 ID * @param slotId 设备 ID * @param channel 通道 * @param value 强度 * @param options 选项 * @return V4SendPromise */ addIntensity(clientId: string, slotId: string, channel: V4Channel, value: number, options?: V4OperateOptions): V4SendPromise; /** * 减少强度(相对) * @param clientId 被控方 ID * @param slotId 设备 ID * @param channel 通道 * @param value 强度 * @param options 选项 * @return V4SendPromise */ reduceStrength(clientId: string, slotId: string, channel: V4Channel, value: number, options?: V4OperateOptions): V4SendPromise; /** * 设置临时强度 * @param clientId 被控方 ID * @param slotId 设备 ID * @param channel 通道 * @param value 强度 * @param options 选项 * @param duration 持续时长 * @return V4SendPromise */ setTempIntensity(clientId: string, slotId: string, channel: V4Channel, value: number, duration: number, options?: V4OperateOptions): V4SendPromise; /** * 设置强度为 0 * @param clientId 被控方 ID * @param slotId 设备 ID * @param channel 通道 * @param options 选项 * @return V4SendPromise */ resetIntensity(clientId: string, slotId: string, channel: V4Channel, options?: V4OperateOptions): V4SendPromise; /** * 下发波形数据 * @param clientId 被控方 ID * @param slotId 设备 ID * @param channel 通道 * @param duration 持续时长 * @param frames 波形帧 * @param options 选项 * @return V4SendPromise */ sendPulse(clientId: string, slotId: string, channel: V4Channel, duration: number, frames: V4AppendPulseDataOperate['v'], options?: V4AppendPulseDataOptions): V4SendPromise; /** * 清理波形数据 * @param clientId 被控方 ID * @param slotId 设备 ID * @param channel 通道 * @return V4SendPromise * */ clearPulse(clientId: string, slotId: string, channel: V4Channel): V4SendPromise; /** * 清理任务 * 可清理特定通道/设备的任务,也可清理全部任务 * @param clientId 被控方 ID * @param options 选项 * @return V4SendPromise * */ clearOperate(clientId: string, options?: V4ClearOperateOptions): V4SendPromise; /** * 处理协议消息 * @param text 文本消息 * @param _raw 原始消息 * */ protected handleProtocolMessage(text: string, _raw: DglabSocketIncoming): void; protected onSocketClosed(): void; /** * 获取连接结果 * - targetId: 被控端 ID * @return DglabSocketConnectResult | undefined * */ protected getConnectedResult(): DglabSocketConnectResult | undefined; /** * 处理 hello 帧,获取被控端 ID * @param frame V4HelloFrame * */ private handleHello; /** * 处理被控方断开 * @param clientId 被控方 ID */ private detachClient; /** * 启动服务端级 ping,用于探测控制方到 V4 socket 服务器的连接 */ private startServerPing; /** * 停止服务端级 ping */ private stopServerPing; /** * 发送服务端级 ping,连续 3 次未收到 pong 时断开连接 */ private sendServerPing; /** * 服务端级 ping 超时后断开连接 */ private disconnectForServerPingTimeout; /** * 处理 SOCKET 消息 * @param frame V4MessageFrame * */ private handleMessage; /** * 确保被控方连接存在 * @param clientId 被控方 ID */ private ensureClient; /** * 根据设备事件生成单设备事件 * @param data 上行数据 * @param client 被控方状态 */ private createDeviceEvents; private createDeviceUpsertEvent; private createPatchValue; private isEqualValue; private isEventRecord; private isCustomActionEvent; /** * 创建 device.op 指令基础数据 * @param slotId 设备 ID * @param channel 通道 * @param options 选项 * */ private createOperateBase; } export * from './types';