import { VortexStatusService } from "./VortexStatusService";
import { PayloadEnvelope } from "./PayloadEnvelope";
import { HttpHeaders } from "@angular/common/http";
/**
 * Server response timeout in milliseconds
 * @type {number}
 */
export declare let SERVER_RESPONSE_TIMEOUT_SECONDS: number;
export declare enum VortexClientStateE {
    Idle = 0,
    Connecting = 1,
    Online = 2,
    Closing = 3,
    Closed = 4
}
export declare abstract class VortexClientABC {
    protected vortexStatusService: VortexStatusService;
    readonly headers: HttpHeaders;
    readonly HEART_BEAT_PERIOD_SECONDS = 10;
    readonly HEART_BEAT_TIMEOUT_SECONDS = 180;
    readonly RECONNECT_BACKOFF_SECONDS = 10;
    private beatTimer;
    private readonly _uuid;
    private readonly _name;
    protected readonly _url: string;
    protected _vortexState: VortexClientStateE;
    protected _isShutdown: boolean;
    private serverVortexUuid;
    private serverVortexName;
    private processingNetworkStateChange;
    /**
     * RapUI VortexService, This class is responsible for sending and receiving payloads to/from
     * the server.
     */
    protected constructor(vortexStatusService: VortexStatusService, url: string, vortexClientName: string, headers: HttpHeaders);
    static makeUuid(): string;
    get url(): string;
    get uuid(): string;
    get name(): string;
    get isConnecting(): boolean;
    get isClosed(): boolean;
    get isClosing(): boolean;
    get isOnline(): boolean;
    get isShutdown(): boolean;
    close(): Promise<void>;
    protected setConnecting(): void;
    protected setOnline(): void;
    protected setClosing(): void;
    protected setClosed(): void;
    protected setShutdown(): void;
    protected abstract shutdown(): Promise<void>;
    reconnect(): Promise<void>;
    protected beat(): void;
    protected restartTimer(): void;
    protected clearBeatTimer(): void;
    private dead;
    protected abstract sendVortexMsg(vortexMsgs: string[]): void;
    send(payloadEnvelope: PayloadEnvelope | PayloadEnvelope[]): Promise<void>;
    /**
     * Receive
     * This should only be called only from VortexConnection
     * @param payloadEnvelope {Payload}
     */
    protected receive(payloadEnvelope: PayloadEnvelope): void;
}
