From 8f1dd625157fa99fc6de50d78637ba68d4fdbcc3 Mon Sep 17 00:00:00 2001 From: Nick O'Leary Date: Wed, 14 May 2014 21:34:17 +0100 Subject: [PATCH] Allow Serial nodes to close asynchonously --- nodes/core/io/25-serial.js | 27 +++++++++++++++++---------- red/nodes/Node.js | 3 ++- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/nodes/core/io/25-serial.js b/nodes/core/io/25-serial.js index 44d054888..bd2370a7d 100644 --- a/nodes/core/io/25-serial.js +++ b/nodes/core/io/25-serial.js @@ -80,9 +80,11 @@ module.exports = function(RED) { this.error("missing serial config"); } - this.on("close", function() { + this.on("close", function(done) { if (this.serialConfig) { - serialPool.close(this.serialConfig.serialport); + serialPool.close(this.serialConfig.serialport,done); + } else { + done(); } }); } @@ -115,12 +117,11 @@ module.exports = function(RED) { this.error("missing serial config"); } - this.on("close", function() { + this.on("close", function(done) { if (this.serialConfig) { - try { - serialPool.close(this.serialConfig.serialport); - } catch(err) { - } + serialPool.close(this.serialConfig.serialport,done); + } else { + done(); } }); } @@ -203,23 +204,29 @@ module.exports = function(RED) { } return connections[id]; }, - close: function(port) { + close: function(port,done) { if (connections[port]) { - if (connections[port].tout != null) clearTimeout(connections[port].tout); + if (connections[port].tout != null) { + clearTimeout(connections[port].tout); + } connections[port]._closing = true; try { connections[port].close(function() { util.log("[serial] serial port closed"); + done(); }); } catch(err) { }; + delete connections[port]; + } else { + done(); } - delete connections[port]; } } }(); RED.httpAdmin.get("/serialports",function(req,res) { serialp.list(function (err, ports) { + console.log(JSON.stringify(ports)); res.writeHead(200, {'Content-Type': 'text/plain'}); res.write(JSON.stringify(ports)); res.end(); diff --git a/red/nodes/Node.js b/red/nodes/Node.js index d4662f89d..75603bda6 100644 --- a/red/nodes/Node.js +++ b/red/nodes/Node.js @@ -35,11 +35,12 @@ function Node(n) { } Node.prototype.on = function(event,callback) { + var node = this; if (event == "close") { if (callback.length == 1) { this.close = function() { return when.promise(function(resolve) { - callback(function() { + callback.call(node,function() { resolve(); }); });