/// declare namespace Leaf { type RPCId = number; const RPCErrors: { APINotExists: Leaf.CustomErrorConstructor; Timeout: Leaf.CustomErrorConstructor; Conflict: Leaf.CustomErrorConstructor; BrokenConnection: Leaf.CustomErrorConstructor; }; interface RPCCallback { (error: Error, result: TResult): void; } interface RPCInvoke { (option?: TOption, callback?: RPCCallback): void; RPC?: RPCDeclare; } interface RPCOption { name: string; timeout?: number; } interface RPCMethodHandler { (data: any, callback: { (err?: Error, data?: any): void; }): void; } class RPCCenter { option: { defaultTimeout?: number; }; declares: any; requestOffset: number; methods: { [index: string]: RPCMethodHandler; }; remoteEvents: EventEmitter; private connection; private responseHandlers; customNormalize: { (data: any): string; }; customDenormalize: { (data: string): any; }; private allocateId(); constructor(option?: { defaultTimeout?: number; }); setConnection(con: RPCConnection): void; unsetConnection(): void; registerRPCMethod(name: string, handler: RPCMethodHandler): void; createRPCDeclare(option: RPCOption): RPCDeclare; createRPCInvokeInterface(option: RPCOption): RPCInvoke; emitRemoteEvent(name: string, data?: any): void; invoke(name: string, data: any, callback?: Function, option?: { timeout?: number; }): void; private send(data); private handleMessage(rawString); private handleInvoke(req); private handleResponse(res); private handleEvent(event); private transformObject(data, handler); private normalize(data); private denormalize(data); private finishHandler(id, err?, value?); } class RPCDeclare { private center; private option; constructor(center: RPCCenter, option: RPCOption); getFunction(): RPCInvoke; invoke(data?: TOption, callback?: RPCCallback): void; } type RPCBaseConnectionMessage = string; interface RPCConnection { events: EventEmitter<"message" | "close">; send: { (data: string): void; }; } abstract class RPCConnectionBase implements RPCConnection { events: EventEmitter; abstract send(data: string): void; } enum RPCProtocolBlobType { INVOKE = 1, RESPONSE = 2, EVENT = 3, } interface RPCResponseHandler { id: RPCId; callback: Function; timer: any; finished: boolean; } interface RPCProtocolBlob { type: RPCProtocolBlobType; } interface RPCProtocolResponseBlob extends RPCProtocolBlob { id: RPCId; data?: any; error?: any; type: RPCProtocolBlobType; } interface RPCProtocolInvokeBlob extends RPCProtocolBlob { id: RPCId; method: string; data: any; type: RPCProtocolBlobType; } interface RPCProtocolEventBlob extends RPCProtocolBlob { name: string; data: any; type: RPCProtocolBlobType; } }