import { EventEmitter } from 'eventemitter3';
import { SocketConnectionEvent } from './socketConnection';
import { MosModel } from '@mos-connection/helper';
import { HandedOverQueue } from './NCSServerConnection';
import { ParsedMosMessage } from './mosMessageParser';
export type CallBackFunction = (data: {
    error: Error | string;
} | {
    reply: ParsedMosMessage;
}) => void;
export interface QueueMessage {
    time: number;
    msg: MosModel.MosMessage;
}
export interface MosSocketClientEvents {
    [SocketConnectionEvent.CONNECTED]: () => void;
    [SocketConnectionEvent.DISCONNECTED]: () => void;
    [SocketConnectionEvent.DISPOSED]: () => void;
    [SocketConnectionEvent.ALIVE]: () => void;
    error: (error: Error) => void;
    warning: (warning: string) => void;
    rawMessage: (...args: any[]) => void;
}
export declare class MosSocketClient extends EventEmitter<MosSocketClientEvents> {
    private _host;
    private _port;
    private _autoReconnect;
    private _reconnectDelay;
    private _reconnectAttempts;
    private _debug;
    private _strict;
    private _description;
    private _client;
    private _shouldBeConnected;
    private _connected;
    private _lastConnectionAttempt;
    private _reconnectAttempt;
    private _connectionAttemptTimer;
    private _commandTimeout;
    private _queueCallback;
    private _lingeringCallback;
    private _queueMessages;
    private _sentMessage;
    private _sentMessageTimeout?;
    private _lingeringMessage;
    private _timedOutCommands;
    private processQueueTimeout?;
    private queueCleanupTimeout?;
    private _disposed;
    private messageParser;
    /** */
    constructor(host: string, port: number, description: string, timeout: number, debug: boolean, strict: boolean);
    /** */
    set autoReconnect(autoReconnect: boolean);
    /** */
    set autoReconnectInterval(autoReconnectInterval: number);
    /** */
    set autoReconnectAttempts(autoReconnectAttempts: number);
    /** */
    connect(): void;
    get isConnected(): boolean;
    /** */
    disconnect(): void;
    queueCommand(message: MosModel.MosMessage, cb: CallBackFunction, time?: number): void;
    processQueue(): void;
    /**
     * Returns a queue of messages to be executed by a different connection.
     * Will exclude hearbeats from the returned queue. The heartbeats must stay inside
     * the internal queue because they are needed for the connection lifecycle.
     */
    handOverQueue(): HandedOverQueue;
    /** */
    get host(): string;
    /** */
    get port(): number;
    /** */
    dispose(): void;
    /**
     * convenience wrapper to expose all logging calls to parent object
     */
    log(...args: any[]): void;
    setDebug(debug: boolean): void;
    /** */
    private set connected(value);
    /** */
    private get connected();
    private _sendReply;
    /** */
    private executeCommand;
    /** */
    private _autoReconnectionAttempt;
    /** */
    private _clearConnectionAttemptTimer;
    /** */
    private _onConnected;
    /** */
    private _onData;
    private _handleMessage;
    private _getMessageId;
    /** */
    private _onError;
    /** */
    private _onClose;
    private _triggerQueueCleanup;
    private debugTrace;
}
//# sourceMappingURL=mosSocketClient.d.ts.map