@cloudpss/ubrpc
Version:
Rpc server/client build on websocket and ubjson.
69 lines • 3.16 kB
TypeScript
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> {
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