
export interface ISocket {
    once(evt: 'disconnect', listener: () => void): void;
    once(evt: 'error', listener: () => void): void;
    on(evt: 'disconnect', listener: (reason: string) => void): void;
    on(evt: 'error', listener: (reason: string) => void): void;
    on(evt: 'message', listener: (msg: any) => void): void;
    send(msg: any): void;
    sendRaw(msg: any): void;
    disconnect(): void;
    sendBatch(msgs: any[]): void;

    emit(evt: 'heartbeat'): void;
    emit(evt: 'heartbeatreset'): void;
    emit(evt: 'message', pkg: any): void;
    emit(evt: 'closing', reason: string): void;
    emit(evt: 'handshake', pkg: any): void;

    state: number;

    id?: number;

    handshakeResponse?: (response: any) => void;
    sendForce?: (response: any) => void;

    remoteAddress?: { ip: string, port?: number };
    heartbeatOnData?: boolean;
}