///
import { PadLocalClient } from "../PadLocalClient";
import { EventEmitter } from "events";
import { Bytes } from "../utils/ByteUtils";
import { LongLinkMessage, WeChatLongLinkRequest } from "../proto/padlocal_pb";
import VError from "verror";
import { Host } from "../utils/Host";
export declare type WeChatLongLinkProxyEvent = "heartbeat" | "message-push" | "push" | "status";
export declare class WeChatLongLinkProxy extends EventEmitter {
private static readonly REQUEST_TIMEOUT;
private static readonly CONNECT_TIMEOUT;
private static readonly SOCKET_TIMEOUT;
private static readonly HEART_BEAT_INTERVAL;
private _heartBeatTimer?;
private _hostList?;
private _status;
private _socket?;
private _socketConnectTimeout?;
private _id?;
private readonly _instanceId;
private _socketPromise?;
private _reconnectDelayTimer?;
private readonly _reconnectStrategy;
private readonly _requestCallbackMap;
private readonly _serialExecutor;
private _streamCallback?;
private readonly _client;
emit(event: "heartbeat", detail: HeartBeatEventPayload): boolean;
emit(event: "message-push"): boolean;
emit(event: "push", detail: Array): boolean;
emit(event: "status", detail: StatusEventPayload): boolean;
constructor(client: PadLocalClient);
updateHostList(hostList: Array): boolean;
reconnect(): Promise;
/**
* disconnect long link
*/
shutdown(clearHost?: boolean): void;
isConnected(): boolean;
isIdle(): boolean;
getId(): string | undefined;
makeSureConnected(): Promise;
sendStreamData(data: Bytes, streamCallback?: LongLinkStreamCallback): void;
sendRequest(longLinkRequest: WeChatLongLinkRequest): Promise;
private _updateStatus;
private _resetHeartBeatTimer;
private _startHeartbeat;
private _stopHeartbeat;
private _clearReconnectTimer;
private _notifyRequestCallback;
private _notifyAllRequestCallbackWithError;
private _destroyLongLink;
private _onSocketError;
private _tryReconnect;
private _connect;
private _onSocketData;
private _adjustHostQuality;
private _currentHost;
}
export declare enum Status {
IDLE = 0,
CONNECTING = 1,
HALF_CONNECTED = 2,
CONNECTED = 3,
STOP = 4,
ERROR = 5
}
export interface StatusEventPayload {
newStatus: Status;
oldStatus: Status;
}
export interface HeartBeatEventPayload {
heartBeatSeq: number;
}
export declare class IOError extends VError {
}
export interface LongLinkStreamCallback {
onStreamData(data: Bytes): Promise;
}