import { EventEmitter } from "events"; import type { IncomingMessage } from "http"; import type { EngineRequest, Transport } from "./transport"; import type { BaseServer } from "./server"; import type { RawData } from "engine.io-parser"; export interface SendOptions { compress?: boolean; } type ReadyState = "opening" | "open" | "closing" | "closed"; type SendCallback = (transport: Transport) => void; export declare class Socket extends EventEmitter { /** * The revision of the protocol: * * - 3rd is used in Engine.IO v3 / Socket.IO v2 * - 4th is used in Engine.IO v4 and above / Socket.IO v3 and above * * It is found in the `EIO` query parameters of the HTTP requests. * * @see https://github.com/socketio/engine.io-protocol */ readonly protocol: number; /** * A reference to the first HTTP request of the session * * TODO for the next major release: remove it */ request: IncomingMessage; /** * The IP address of the client. */ readonly remoteAddress: string; /** * The current state of the socket. */ _readyState: ReadyState; /** * The current low-level transport. */ transport: Transport; private server; upgrading: boolean; upgraded: boolean; private writeBuffer; private packetsFn; private sentCallbackFn; private cleanupFn; private pingTimeoutTimer; private pingIntervalTimer; /** * This is the session identifier that the client will use in the subsequent HTTP requests. It must not be shared with * others parties, as it might lead to session hijacking. * * @private */ private readonly id; get readyState(): ReadyState; set readyState(state: ReadyState); constructor(id: string, server: BaseServer, transport: Transport, req: EngineRequest, protocol: number); /** * Called upon transport considered open. * * @private */ private onOpen; /** * Called upon transport packet. * * @param {Object} packet * @private */ private onPacket; /** * Called upon transport error. * * @param {Error} err - error object * @private */ private onError; /** * Pings client every `this.pingInterval` and expects response * within `this.pingTimeout` or closes connection. * * @private */ private schedulePing; /** * Resets ping timeout. * * @private */ private resetPingTimeout; /** * Attaches handlers for the given transport. * * @param {Transport} transport * @private */ private setTransport; /** * Upon transport "drain" event * * @private */ private onDrain; /** * Upgrades socket to the given transport * * @param {Transport} transport * @private */ _maybeUpgrade(transport: Transport): void; /** * Clears listeners and timers associated with current transport. * * @private */ private clearTransport; /** * Called upon transport considered closed. * Possible reasons: `ping timeout`, `client error`, `parse error`, * `transport error`, `server close`, `transport close` */ private onClose; /** * Sends a message packet. * * @param {Object} data * @param {Object} options * @param {Function} callback * @return {Socket} for chaining */ send(data: RawData, options?: SendOptions, callback?: SendCallback): this; /** * Alias of {@link send}. * * @param data * @param options * @param callback */ write(data: RawData, options?: SendOptions, callback?: SendCallback): this; /** * Sends a packet. * * @param {String} type - packet type * @param {String} data * @param {Object} options * @param {Function} callback * * @private */ private sendPacket; /** * Attempts to flush the packets buffer. * * @private */ private flush; /** * Get available upgrades for this socket. * * @private */ private getAvailableUpgrades; /** * Closes the socket and underlying transport. * * @param {Boolean} discard - optional, discard the transport * @return {Socket} for chaining */ close(discard?: boolean): void; /** * Closes the underlying transport. * * @param {Boolean} discard * @private */ private closeTransport; } export {};