import EventEmitter from 'eventemitter3'; import type { DglabSocketBase } from './base'; import { type DglabSendOptions, type DglabSocketEventMap, type DglabSocketOptions, type DglabSocketOutgoing, type DglabSocketV3Options, type DglabSocketV4Options } from './base/types'; import { DglabSocketV3 } from './v3'; import type { V4SendPromise } from './v4'; import { DglabSocketV4 } from './v4'; type DglabSocketAdapter = DglabSocketV3 | DglabSocketV4; declare class DglabSocketImpl extends EventEmitter { private readonly adapter; private readonly adapterEventCleanups; /** * DG-LAB SOCKET * @param options 连接配置,不传入时可使用自定义 WebSocket 实现 */ constructor(options?: DglabSocketOptions); /** * 当前 Socket 连接状态 */ get state(): DglabSocketV3['state'] | DglabSocketV4['state']; /** * 连接 WebSocket */ connect(): ReturnType; /** * 发送协议数据 * V3: send(data) * V4: send(clientId, data, options) * @param clientIdOrData V3 数据或 V4 被控方 ID * @param data V4 要发送的数据 * @param options 选项 */ send(clientIdOrData: string | TData, data?: TData, options?: DglabSendOptions): undefined | V4SendPromise; /** * 断开当前 Socket 连接 * @param code 关闭码 * @param reason 关闭原因 */ disconnect(code?: number, reason?: string): void; /** * 销毁当前 Socket 实例 * @param code 关闭码 * @param reason 关闭原因 */ destroy(code?: number, reason?: string): void; /** * 绑定手动传输模式下的 Websocket 数据发送 * @param sender 数据发送处理函数 */ setSender(sender: (data: DglabSocketOutgoing) => void): this; /** * 发送原始 WebSocket 数据 * @param data 要发送的原始 WebSocket 数据 */ sendRaw(data: DglabSocketOutgoing): void; /** * 处理手动传输模式收到的 MESSAGE 数据 * @param data WebSocket 收到的原始消息数据 */ handleMessage(data: unknown): void; /** * 处理手动传输模式的 OPEN 事件 * @param event WebSocket 实现产生的 open 事件对象 */ handleOpen(event?: unknown): void; /** * 处理手动传输模式的 CLOSE 事件 * @param eventOrCode 浏览器 CloseEvent、Node ws close code * @param reason Node ws close reason;浏览器 CloseEvent 场景通常不需要传 */ handleClose(eventOrCode?: unknown, reason?: unknown): void; /** * 处理手动传输模式的 ERROR 事件 * @param error WebSocket 或传输层产生的错误对象 */ handleError(error: unknown): void; createAdapterProxy(): this; /** * 转发底层事件 */ private forwardAdapterEvents; /** * 转发单个底层事件 * @param event 事件名 */ private forwardAdapterEvent; } type EventEmitterKey = keyof EventEmitter; type DglabSocketEventEmitterKey = 'emit' | 'on' | 'once' | 'off'; type DglabSocketEventEmitter = Pick, DglabSocketEventEmitterKey>; type DglabSocketBaseKey = Exclude, EventEmitterKey>; type DglabSocketCommonKey = Exclude | 'destroy'; type DglabSocketAdapterKey = Exclude; type DglabSocketAdapterApi = Pick>; type DglabSocketRawAdapter = Pick>; type DglabManualSocketKey = Extract; /** * SOCKET 实例公共配置 */ export type DglabSocketCommon = DglabSocketEventEmitter & Pick & { readonly raw: DglabSocketRawAdapter; }; /** * SOCKET V3 客户端 * @deprecated 请使用 V4 协议 */ export type DglabSocketV3Client = DglabSocketCommon & DglabSocketAdapterApi & Pick; /** * SOCKET V4 客户端 */ export type DglabSocketV4Client = DglabSocketCommon & DglabSocketAdapterApi & Pick; /** * 使用自定义 Websocket 实现 * */ export type DglabManualSocket = DglabSocketV4Client & Pick; /** * 构造实例 * */ export interface DglabSocketConstructor { new (): DglabManualSocket; /** * @deprecated 请使用 V4 协议 */ new (options: DglabSocketV3Options): DglabSocketV3Client; new (options: DglabSocketV4Options): DglabSocketV4Client; new (options: DglabSocketOptions): DglabSocketV3Client | DglabSocketV4Client; } /** * DG-LAB SOCKET */ export declare const DglabSocket: DglabSocketConstructor; export type DglabSocket = DglabManualSocket | DglabSocketV3Client | DglabSocketV4Client; export * from './base/types'; export * from './v3/types'; export * from './v4/types';