/** * @file interface * @description WebSocket 客户端接口定义 */ export declare enum ReadyState { UNINSTANTIATED = -1, CONNECTING = 0, OPEN = 1, CLOSING = 2, CLOSED = 3 } export declare enum CloseEventCode { CLOSE_INTERRUPT_WITH_NEW_URL = 4000 } export type Combine = (req: T, res: K) => boolean; export interface SocketCloseEvent extends CloseEvent { isInterruptWithNewUrl?: boolean; } export interface CreateOptions { protocols?: string | string[]; reopen?: boolean; reopenDelay?: number; reopenDelayIncrease?: (reopenInfo: { reopenCount: number; preDelay: number; isServerClosed: boolean; }) => number; reopenAttempts?: number; reopenWhenServerClosed?: boolean; combine?: Combine; keepAlive?: 'pingpong' | 'heartbeat' | 'none'; keepAliveDelay?: number; getKeepAliveMessage?: (requestId: string) => any; checkHeartbeatMismatch?: boolean; keepAliveMismatchField?: string; keepAliveMismatchMaxCount?: number; onOpen?(event: WebSocketEventMap['open']): void; onClose?(event: SocketCloseEvent): void; onServerClose?(event: WebSocketEventMap['close']): void; onReopenAttemptEnd?(isServerClosed: boolean): void; onMessage?(event: WebSocketEventMap['message']): void; onError?(event: WebSocketEventMap['error']): void; } export interface Receiveable { then(handler: (responseData: T) => unknown): Promise; on(handler: (responseData: T, off: () => void) => void): void; } export interface AwaitContext { requestData: T; responseData: K; then?: (responseData: T) => unknown; on?: (responseData: T) => void; } export interface FlushedArray extends Array { flush(): void; } export interface WebSocketClient extends Record { socket: WebSocket | null; messages: FlushedArray; readyState: ReadyState; isOpened: boolean; isActive: boolean; open(): WebSocketClient; openWithNewUrl(newUrl: string): WebSocketClient; connect: WebSocketClient['open']; close(code?: number | undefined, reason?: string | undefined): void; destroy(): void; disconnect: WebSocketClient['close']; send(dataOrGetData: T | ((requestId: string) => T)): WebSocketClient; request(dataOrGetData: K | ((requestId: string) => K)): Receiveable; receive(): Promise; onReceive(handler: (data: T) => void): () => void; onMessage: WebSocketClient['onReceive']; onReadyStateChange(handler: (readyState: ReadyState) => void): () => void; serialization(data: any): string | ArrayBufferLike | Blob | ArrayBufferView; deserialization(data: string | ArrayBufferLike | Blob | ArrayBufferView): any; }