From d689674fb568b67f7988ed27178ae15a6334c0b5 Mon Sep 17 00:00:00 2001 From: hua Date: Wed, 24 May 2017 19:29:02 +0800 Subject: [PATCH] fixbug --- lib/master/ipc.js | 14 +++++++------- lib/master/sys.js | 4 +++- lib/worker/ipc.js | 25 +++++++++++++++++++++---- 3 files changed, 31 insertions(+), 12 deletions(-) diff --git a/lib/master/ipc.js b/lib/master/ipc.js index bc9d4e9..c7ec64c 100644 --- a/lib/master/ipc.js +++ b/lib/master/ipc.js @@ -304,13 +304,8 @@ master.on('worker::event::callWorkerRes', function callWorkerRes (res, handle, w // /**************************** 子进程对管理进程调用开始 ****************************/ // 子进程中转-转发子进程数据到子进程 master.on('worker::event::workerSendToWorker', function workerSendToWorker (body, handle, worker) { - master.sendToWorker(body.toWorkerId, body.type, body.message, (state, message) => { - master.sendToWorker(worker.id, 'workerSendToWorkerCallback', { - id: body.id, - state: state, - message: message - }).catch(e => master.logError(e)) - }).then(({isCallback, state, message, handle}) => { + master.sendToWorker(body.toWorkerId, body.type, body.message) + .then(({isCallback, state, message, handle}) => { master.sendToWorker(worker.id, 'workerSendToWorkerCallback', {id: body.id, message, isCallback: true}, handle).catch(e => master.logError(e)) }, ({name, type, stack, handle}) => { master.sendToWorker(worker.id, 'workerSendToWorkerCallback', {id: body.id, errorName: name, errorType: type, errorStack: stack, isCallback: true}, handle).catch(e => master.logError(e)) @@ -417,6 +412,11 @@ master.on('worker::event::callMaster', (res, handle, worker) => { // 绑定 daemon 进程发来的信息 process.on('message', function (res, handle) { if (!res) return + console.log( + typeof (res.isCallback === true && res.id && processCallback && processCallback[res.id]), + res.isCallback, res.id + + ) if (res.type && res.id) { if (master.emit(('daemon::event::' + res.type), res.message, handle)) { process.send({ diff --git a/lib/master/sys.js b/lib/master/sys.js index 9482ed8..6009fc1 100644 --- a/lib/master/sys.js +++ b/lib/master/sys.js @@ -110,6 +110,9 @@ sys.onWorker.message = function (res, handle) { if (!res) return if (res.type && res.id) { if (master.emit(('worker::event::' + res.type), res.message, handle, this)) { + if (res.type === 'workerSendToWorker') { + return + } this.send({ isCallback: true, id: res.id, @@ -264,4 +267,3 @@ master.serverRun = function masterServerRun () { require('./server.js') // 通过守护进程初始化 sys.initByDaemon() - diff --git a/lib/worker/ipc.js b/lib/worker/ipc.js index de52070..eb58995 100644 --- a/lib/worker/ipc.js +++ b/lib/worker/ipc.js @@ -192,10 +192,27 @@ worker.on('master::event::callMasterRes', function callMasterRes (res, handle) { res = handle = void 0 }) // 管理进程发来信息,是worker发送结果的回调 -worker.on('master::event::workerSendToWorkerCallback', function workerSendToWorkerCallback (res) { - if (processCallback && processCallback[res.id] && util.isFunction(processCallback[res.id])) { - processCallback[res.id]((res.state || false), (res.message || 'unknown_error')) - delete processCallback[res.id] +worker.on('master::event::workerSendToWorkerCallback', function workerSendToWorkerCallback (res, handle) { + if (res.isCallback && processCallback && processCallback[res.id]) { + if (res.errorStack) { + if (util.isFunction(processCallback[res.id][1])) { + let e = new worker.WorkerError(res.message || 'worker call worker fail') + e.stack = (res.errorStack || '') + '\n\n' + e.stack + e.type = res.errorType || 'sendToWorker' + e.name = res.errorName || 'WORKER_CALL_WORKER_FAIL' + e.id = res.id + e.handle = handle + processCallback[res.id][1].call(processCallback[res.id][2], e) + } + } else { + if (util.isFunction(processCallback[res.id][0])) { + processCallback[res.id][0].call(processCallback[res.id][2], { + id: res.id, + message: res.message, + handle + }) + } + } } })