import { Observable } from 'rxjs';
import type { ConnectionID, RpcCallPayload, RpcMetadata, RpcNotifyPayload, RpcPayload, RpcSubscribePayload } from './types/payload.js';
import type { Methods, Notifications, RpcObject, RpcParameters, RpcReturns, Subjects } from './types/utils.js';
/** RPC 连接 */
export declare abstract class RpcSocket<TRemote extends object, TLocal extends object> {
    #private;
    readonly id: ConnectionID;
    constructor(id: ConnectionID, local?: RpcObject<TLocal>);
    protected _localMetadata?: RpcMetadata;
    protected _remoteMetadata?: RpcMetadata;
    /** 本地认证信息 */
    get localMetadata(): RpcMetadata | undefined;
    /** 远程认证信息 */
    get remoteMetadata(): RpcMetadata | undefined;
    /** 连接是否已认证 */
    get authenticated(): boolean;
    private readonly __local?;
    /** 用于响应调用的本地对象 */
    protected get local(): RpcObject<TLocal> | undefined;
    private __socket?;
    /** 作为底层传输的 WebSocket */
    get socket(): WebSocket;
    protected set socket(value: WebSocket);
    /** 创建 ready Promise */
    private makeReady;
    private __readyCallbacks?;
    protected ready: Promise<void>;
    private readonly __handlers;
    /** 初始化 WebSocket */
    protected initSocket(oldValue: WebSocket | undefined, newValue: WebSocket): Promise<void>;
    /** 认证 WebSocket */
    protected abstract authSocket(): Promise<RpcMetadata>;
    /** 响应 WebSocket error */
    protected onError(_ev: ErrorEvent | Event): void;
    /** 响应 WebSocket open */
    protected onOpen(_ev: Event): void;
    /** 响应 WebSocket close */
    protected onClose(ev: CloseEvent): void;
    /** 响应 WebSocket message */
    protected onMessage(ev: MessageEvent): void;
    /** 响应 Rpc 消息 */
    protected onPayload(payload: RpcPayload): boolean;
    /** 调用本地方法 */
    protected localCall(payload: RpcCallPayload | RpcNotifyPayload): Promise<void>;
    private readonly localSubscription;
    /** 调用本地方法 */
    protected localSubscribe(payload: RpcSubscribePayload): Promise<void>;
    /** 发送数据 */
    protected sendPayload<T extends RpcPayload['type']>(type: T, info: Omit<RpcPayload & {
        type: T;
    }, 'type'>): Promise<void>;
    /** 序列号 */
    protected seq: number;
    /** 获取下一个序列号 */
    protected nextSeq(): number;
    private readonly pendingCalls;
    /** 调用远程方法 */
    call<TMethod extends Methods<TRemote>>(method: TMethod, ...args: RpcParameters<TRemote[TMethod]>): Promise<RpcReturns<TRemote[TMethod]>>;
    /** 调用远程方法，放弃返回值 */
    notify<TNotification extends Notifications<TRemote>>(method: TNotification, ...args: RpcParameters<TRemote[TNotification]>): void;
    private readonly pendingSubscriptions;
    /** 调用远程订阅 */
    subscribe<TSubject extends Subjects<TRemote>>(method: TSubject, ...args: RpcParameters<TRemote[TSubject]>): Observable<RpcReturns<TRemote[TSubject]>>;
    /** 是否已结束 */
    get destroyed(): boolean;
    /** 结束 */
    destroy(): void;
}
//# sourceMappingURL=socket.d.ts.map