mirror of
https://github.com/node-red/node-red.git
synced 2023-10-10 13:36:53 +02:00
Allow nodes to close asynchronously
This commit is contained in:
parent
3ba6ad07b7
commit
c317ccc36d
@ -17,6 +17,7 @@
|
|||||||
var util = require("util");
|
var util = require("util");
|
||||||
var EventEmitter = require("events").EventEmitter;
|
var EventEmitter = require("events").EventEmitter;
|
||||||
var clone = require("clone");
|
var clone = require("clone");
|
||||||
|
var when = require("when");
|
||||||
|
|
||||||
var flows = require("./flows");
|
var flows = require("./flows");
|
||||||
var credentials = require('./credentials')
|
var credentials = require('./credentials')
|
||||||
@ -24,6 +25,7 @@ var comms = require("../comms");
|
|||||||
|
|
||||||
function Node(n) {
|
function Node(n) {
|
||||||
this.id = n.id;
|
this.id = n.id;
|
||||||
|
this._events = new EventEmitter();
|
||||||
flows.add(this);
|
flows.add(this);
|
||||||
this.type = n.type;
|
this.type = n.type;
|
||||||
if (n.name) {
|
if (n.name) {
|
||||||
@ -31,13 +33,30 @@ function Node(n) {
|
|||||||
}
|
}
|
||||||
this.wires = n.wires||[];
|
this.wires = n.wires||[];
|
||||||
}
|
}
|
||||||
util.inherits(Node,EventEmitter);
|
|
||||||
|
|
||||||
Node.prototype.close = function() {
|
Node.prototype.on = function(event,callback) {
|
||||||
// called when a node is removed
|
if (event == "close") {
|
||||||
this.emit("close");
|
if (callback.length == 1) {
|
||||||
|
this.close = function() {
|
||||||
|
return when.promise(function(resolve) {
|
||||||
|
callback(function() {
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.close = callback;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
this._events.on(event,callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Node.prototype.emit = function(event,args) {
|
||||||
|
this._events.emit(event,args);
|
||||||
|
}
|
||||||
|
|
||||||
|
Node.prototype.close = function() {
|
||||||
|
}
|
||||||
|
|
||||||
Node.prototype.send = function(msg) {
|
Node.prototype.send = function(msg) {
|
||||||
// instanceof doesn't work for some reason here
|
// instanceof doesn't work for some reason here
|
||||||
|
@ -93,7 +93,7 @@ function stopFlows() {
|
|||||||
if (activeConfig&&activeConfig.length > 0) {
|
if (activeConfig&&activeConfig.length > 0) {
|
||||||
util.log("[red] Stopping flows");
|
util.log("[red] Stopping flows");
|
||||||
}
|
}
|
||||||
flowNodes.clear();
|
return flowNodes.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
var flowNodes = module.exports = {
|
var flowNodes = module.exports = {
|
||||||
@ -120,12 +120,21 @@ var flowNodes = module.exports = {
|
|||||||
return nodes[i];
|
return nodes[i];
|
||||||
},
|
},
|
||||||
clear: function() {
|
clear: function() {
|
||||||
|
return when.promise(function(resolve) {
|
||||||
events.emit("nodes-stopping");
|
events.emit("nodes-stopping");
|
||||||
|
var promises = [];
|
||||||
for (var n in nodes) {
|
for (var n in nodes) {
|
||||||
nodes[n].close();
|
var p = nodes[n].close();
|
||||||
|
if (p) {
|
||||||
|
promises.push(p);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
when.settle(promises).then(function() {
|
||||||
events.emit("nodes-stopped");
|
events.emit("nodes-stopped");
|
||||||
nodes = {};
|
nodes = {};
|
||||||
|
resolve();
|
||||||
|
});
|
||||||
|
});
|
||||||
},
|
},
|
||||||
each: function(cb) {
|
each: function(cb) {
|
||||||
for (var n in nodes) {
|
for (var n in nodes) {
|
||||||
@ -141,9 +150,10 @@ var flowNodes = module.exports = {
|
|||||||
},
|
},
|
||||||
setFlows: function(conf) {
|
setFlows: function(conf) {
|
||||||
return storage.saveFlows(conf).then(function() {
|
return storage.saveFlows(conf).then(function() {
|
||||||
stopFlows();
|
return stopFlows().then(function() {
|
||||||
activeConfig = conf;
|
activeConfig = conf;
|
||||||
parseConfig();
|
parseConfig();
|
||||||
|
});
|
||||||
})
|
})
|
||||||
},
|
},
|
||||||
stopFlows: stopFlows
|
stopFlows: stopFlows
|
||||||
|
Loading…
Reference in New Issue
Block a user