import { BaseProtocolRealtime } from "./abstract/Realtime";
import { JSONObject } from "../types";
import { RequestPayload } from "../types/RequestPayload";
import { DisconnectionOrigin } from "./DisconnectionOrigin";
/**
 * WebSocket protocol used to connect to a Kuzzle server.
 */
export default class WebSocketProtocol extends BaseProtocolRealtime {
    private WebSocketClient;
    private options;
    private client;
    private lasturl;
    private ping;
    private waitForPong;
    private pingIntervalId;
    private _pingInterval;
    private _httpProtocol;
    /**
     * @param host Kuzzle server hostname or IP
     * @param options WebSocket connection options
     *    - `autoReconnect` Automatically reconnect to kuzzle after a `disconnected` event. (default: `true`)
     *    - `port` Kuzzle server port (default: `7512`)
     *    - `headers` Connection custom HTTP headers (Not supported by browsers)
     *    - `reconnectionDelay` Number of milliseconds between reconnection attempts (default: `1000`)
     *    - `pingInterval` Number of milliseconds between two pings (default: `2000`)
     *    - `ssl` Use SSL to connect to Kuzzle server. Default `false` unless port is 443 or 7443.
     */
    constructor(host: string, options?: {
        autoReconnect?: boolean;
        port?: number;
        headers?: JSONObject;
        reconnectionDelay?: number;
        pingInterval?: number;
        /**
         * @deprecated Use `ssl` instead
         */
        sslConnection?: boolean;
        ssl?: boolean;
    });
    /**
     * Connect to the websocket server
     */
    _connect(): Promise<void>;
    connect(): Promise<void>;
    enableCookieSupport(): void;
    /**
     * Sends a payload to the connected server
     *
     * @param {Object} payload
     */
    send(request: RequestPayload, options?: JSONObject): void;
    /**
     * @override
     */
    clientDisconnected(origin: DisconnectionOrigin): void;
    /**
     * @override
     *
     * @param {Error} error
     */
    clientNetworkError(error: any): void;
    /**
     * Closes the connection
     */
    close(): void;
    private setupPingPong;
}
