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