From 0177a27b333482ae5fee9f2c87fc1581b5bea254 Mon Sep 17 00:00:00 2001 From: Luk Lu Date: Tue, 23 Mar 2021 20:36:35 +0800 Subject: [PATCH] improvements --- index.js | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/index.js b/index.js index 07dd008..1d04ff9 100644 --- a/index.js +++ b/index.js @@ -19,12 +19,8 @@ const DAD = (module.exports = class RpcSocket extends ws { let { rpcType, rpcHow, rpcWhat, randomEvent, rpcResult } = JSON.parse(data) // console.log('message data parsed to obj=',obj) switch (rpcType) { - case 'SEND_NOTIFY': // 接收到同步的远程调用 - // console.log(`SEND_REQUEST_SYNC message: rpcHow=${obj.rpcHow}, rpcWhat=${JSON.stringify(obj.rpcWhat)}`) - if (ws.hasOwnProperty(rpcHow)) ws[rpcHow](rpcWhat) - else if (ws.eventNames().indexOf(rpcHow) >= 0) ws.emit(rpcHow, rpcWhat) - else console.log('onmessage unknown notification') - case 'SEND_REQUEST': // 接收到异步的远程调用 + case 'SEND_REQUEST': + // 接收到异步的远程调用 // console.log(`被动方 收到 SEND_REQUEST_ASYNC: rpcHow=${obj.rpcHow}, rpcWhat=${JSON.stringify(obj.rpcWhat)}`) let rpcResult if (ws.hasOwnProperty(rpcHow)) rpcResult = await ws[rpcHow](rpcWhat) @@ -32,13 +28,23 @@ const DAD = (module.exports = class RpcSocket extends ws { if (randomEvent) { ws.send(JSON.stringify({ rpcType: 'SEND_RESULT', randomEvent, rpcResult })) // 返回结果给远程 } - case 'SEND_RESULT': // 接收到远程返回的结果 + break + case 'SEND_RESULT': + // 接收到远程返回的结果 // console.log('主动方 收到 SEND_RESULT: rpcResult=', obj.rpcResult) ws.emit(randomEvent, rpcResult) + break + case 'SEND_NOTIFY': default: + // 接收到同步的远程调用 或者 标准ws的send(...) + // console.log(`SEND_REQUEST_SYNC message: rpcHow=${obj.rpcHow}, rpcWhat=${JSON.stringify(obj.rpcWhat)}`) + if (ws.hasOwnProperty(rpcHow)) ws[rpcHow](rpcWhat) + else if (ws.eventNames().indexOf(rpcHow) >= 0) ws.emit(rpcHow, rpcWhat) + else console.log('[onmessage] unknown rpc: ', rpcHow, rpcWhat) + break } } catch (exception) { - console.error('Invalid socket message received!') + console.error('[onmessage] invalid rpc data: ', data) return } } @@ -65,24 +71,24 @@ const DAD = (module.exports = class RpcSocket extends ws { }) } - sendNotify({ rpcHow, rpcWhat, options, cb } = {}) { + sendNotify({ rpcHow, rpcWhat, options, callback } = {}) { // 发起同步的远程调用 - this.send(JSON.stringify({ rpcType: 'SEND_NOTIFY', rpcHow, rpcWhat }), options, cb) + this.send(JSON.stringify({ rpcType: 'SEND_NOTIFY', rpcHow, rpcWhat }), options, callback) } - sendRequest({ rpcHow, rpcWhat, ack, timeout = 5000 } = {}) { + sendRequest({ rpcHow, rpcWhat, rpcCallback, timeout = 5000 } = {}) { // 发起异步的远程调用 let randomEvent = randomBytes(16).toString('hex') // console.log('randomEvent is randomized: ', randomEvent) - if (typeof ack === 'function') { + if (typeof rpcCallback === 'function') { // 有回调 this.send(JSON.stringify({ rpcType: 'SEND_REQUEST', rpcHow, rpcWhat, randomEvent }), () => { // console.log('in callback, randomEvent=', randomEvent) - this.once(randomEvent, ack) + this.once(randomEvent, rpcCallback) setTimeout(() => { if (this.eventNames().indexOf(randomEvent) >= 0) { this.removeAllListeners(randomEvent) - ack({ _state: 'timeout', error: `RpcSocket sendRequest ${rpcHow} timeout` }) + rpcCallback({ _state: 'RPC_REQUEST_TIMEOUT', message: `RpcSocket sendRequest timeout: ${rpcHow} ${rpcWhat}` }) } }, timeout) }) @@ -94,7 +100,7 @@ const DAD = (module.exports = class RpcSocket extends ws { setTimeout(() => { if (this.eventNames().indexOf(randomEvent) >= 0) { this.removeAllListeners(randomEvent) - resolve({ _state: 'timeout', error: `RpcSocket sendRequest ${rpcHow} timeout` }) + resolve({ _state: 'RPC_REQUEST_TIMEOUT', error: `RpcSocket sendRequest timeout: ${rpcHow} ${rpcWhat}` }) } }, timeout) })