UNPKG

@cloudpss/ubrpc

Version:

Rpc server/client build on websocket and ubjson.

69 lines 3.16 kB
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