This commit is contained in:
2020-11-04 18:09:10 +01:00
parent d961e8ed9c
commit 2b5088228b

View File

@@ -24,6 +24,11 @@ module.exports = function(RED) {
var password = this.device.password; var password = this.device.password;
var command; var command;
var connection = mikrotik.getConnection(host, username, password, {closeOnDone : false, port: port});
var connpromise = null;
var connected = false;
node.status({fill:"grey",shape:"dot",text:"unconfigured"});
switch (parseInt(node.action)) { switch (parseInt(node.action)) {
case 0: case 0:
command = '/log/print'; command = '/log/print';
@@ -42,32 +47,46 @@ module.exports = function(RED) {
break; break;
} }
var connection = mikrotik.getConnection(host, username, password, {closeOnDone : false, port: port}); function on_connect(){
var conn = null; node.status({fill:"green",shape:"dot",text:"connected"});
try { connected = true;
conn = connection.connect();
} catch (error) {
node.error(error);
} }
connpromise = connection.connect(on_connect);
connpromise.on('close', function(err){
node.status({fill:"yellow",shape:"dot",text:"disconnected:"+err});
connected = false;
});
connpromise.on('trap', function(err){
node.status({fill:"red",shape:"ring",text:"FAILED:"+err});
connected = false;
});
connpromise.on('error', function(err){
node.status({fill:"red",shape:"dop",text:"ERROR:"+err});
connected = false;
});
this.on('input', function(msg) { this.on('input', function(msg) {
if (command == '') command = msg.payload; if (command == '') command = msg.payload;
if (command == '') return false; if (command == '') return false;
if (!connected) {
conn.getCommandPromise(command).then( connection.connect(on_connect);
function resolved(values) { //promise resolved } else {
var parsed = mikrotik.parseItems(values); connpromise.getCommandPromise(command).then(
var pl = []; function resolved(values) { //promise resolved
parsed.forEach(function(item) { var parsed = mikrotik.parseItems(values);
pl.push(item); var pl = [];
}); parsed.forEach(function(item) {
msg.payload = values; pl.push(item);
node.send(msg); });
}, msg.payload = values;
function notresolved(reason) { //promise rejected node.send(msg);
node.error('Error executing cmd['+command+']: ' + JSON.stringify(reason)); }, function notresolved(reason) { //promise rejected
} node.error('Error executing cmd['+command+']: ' + JSON.stringify(reason));
); }
);
}
command = ''; //reset command string
}); });
this.on('close', function() { this.on('close', function() {