From 46fdc780822338249bfe7d202555538747981b8e Mon Sep 17 00:00:00 2001 From: Derrick Hammer Date: Sat, 23 Jul 2022 02:49:54 -0400 Subject: [PATCH] *Refactor RPCConnection to fix design issues --- src/rpc.ts | 55 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 29 insertions(+), 26 deletions(-) diff --git a/src/rpc.ts b/src/rpc.ts index 0559347..acd1e9d 100644 --- a/src/rpc.ts +++ b/src/rpc.ts @@ -255,35 +255,38 @@ export async function start() { class RPCConnection { private _socket: any; - private _process = false; constructor(socket: any) { this._socket = socket; socket.rawStream._ondestroy = () => false; + socket.once("data", this.checkRpc.bind(this)); + } - let isRpc = false; - socket.once("data", async (data: any) => { - if (data === "rpc") { - isRpc = true; - } - }); - socket.once("data", async (data: any) => { - if (!isRpc) { - return; - } - let request: RPCRequest; - try { - request = unpack(data) as RPCRequest; - } catch (e) { - return; - } + private async checkRpc(data: Buffer) { + if (data.toString() === "rpc") { + this._socket.once("data", this.processRequest); + } + } - try { - socket.write(pack(await maybeProcessRequest(request))); - } catch (error) { - console.trace(error); - socket.write(pack({ error })); - } - socket.end(); - }); - }); + private async processRequest(data: Buffer) { + let request: RPCRequest; + try { + request = unpack(data) as RPCRequest; + } catch (e) { + return; + } + + const that = this as any; + + try { + that.write(pack(await maybeProcessRequest(request))); + } catch (error) { + console.trace(error); + that.write(pack({ error })); + } + that.end(); + } + + public static handleRequest(socket: any) { + new RPCConnection(socket); + } }