UNPKG

@cloudpss/ubrpc

Version:

Rpc server/client build on websocket and ubjson.

55 lines 2.53 kB
import { RpcSocket } from './socket.js'; import type { ConnectionID, RpcMetadata } from './types/payload.js'; import type { RpcObject } from './types/utils.js'; declare const kOnClose: unique symbol; declare const kMetadata: unique symbol; declare const kReplaceSocket: unique symbol; /** 认证过的 socket */ type WebSocketWithMetadata = WebSocket & { [kMetadata]: RpcMetadata; }; /** * 客户端认证方法 * @param metadata 客户端传入的认证元数据 * @returns 服务端返回客户端的认证元数据 * @throws 认证失败时抛出异常 */ type RpcClientAuthenticator = (metadata: RpcMetadata) => RpcMetadata | Promise<RpcMetadata>; /** 由 WS Server 建立的 RPC 连接组 */ export declare class RpcServer<TRemote extends object, TLocal extends object> { /** 客户端认证方法 */ readonly authenticator: RpcClientAuthenticator; constructor( /** 服务端 RPC 实现 */ local?: RpcObject<TLocal> | ((socket: RpcServerSocket<TRemote, TLocal>) => RpcObject<TLocal>), /** 客户端认证方法 */ authenticator?: RpcClientAuthenticator); /** 用于响应调用的本地对象 */ readonly local?: (socket: RpcServerSocket<TRemote, TLocal>) => RpcObject<TLocal>; /** 已建立连接的客户端 */ protected readonly _sockets: Map<ConnectionID, RpcServerSocket<TRemote, TLocal>>; /** 已建立连接的客户端 */ get sockets(): ReadonlyMap<ConnectionID, RpcServerSocket<TRemote, TLocal>>; /** WebSocket 连接后调用此方法建立 RPC 连接 */ connect(socket: WebSocket): Promise<RpcServerSocket<TRemote, TLocal>>; /** 认证客户端 */ protected authSocket(socket: WebSocket, tempId: string): Promise<[ConnectionID, RpcMetadata]>; private readonly disconnectingSockets; /** WebSocket 断开时调用 */ [kOnClose](socket: RpcServerSocket<TRemote, TLocal>): void; } /** 由 WS Server 建立的 RPC 连接 */ export declare class RpcServerSocket<TRemote extends object, TLocal extends object> extends RpcSocket<TRemote, TLocal> { readonly server: RpcServer<TRemote, TLocal>; constructor(id: ConnectionID, server: RpcServer<TRemote, TLocal>); /** @inheritdoc */ protected authSocket(): Promise<RpcMetadata>; /** @inheritdoc */ protected get local(): RpcObject<TLocal> | undefined; /** @inheritdoc */ protected onClose(ev: CloseEvent): void; /** 替换 socket */ [kReplaceSocket](newSocket: WebSocketWithMetadata): Promise<void>; } export {}; //# sourceMappingURL=server.d.ts.map