node-red-contrib-vocalrec
Version:
Nodos personalizados de Node-RED para la API de VocalRec
89 lines (70 loc) • 2.44 kB
JavaScript
module.exports = function (RED) {
"use strict";
var amanager = require('vocalrec-manager');
function filterEvent(events, data) {
if (events.length === 0 || (events.length && events.indexOf(data.event) >= 0)) {
return true;
}
else {
return false;
}
}
function getAllowedEvents(events) {
var evt = events.trim().split(',');
evt = evt.filter(function (element, index, array) {
if (element)
return true;
else
return false;
});
evt = evt.map(function (element) {
return element.trim();
});
return evt;
}
function attachEvents(context, events, callback) {
events = events.split(' ');
events.forEach(function (event) {
context.on(event, callback);
});
}
function VocalRec(config) {
RED.nodes.createNode(this, config);
var node = this;
var username = this.credentials.username;
var password = this.credentials.password;
var events = getAllowedEvents(config.events);
var ami = new amanager(config.port, config.ip, username, password, true);
attachEvents(ami, 'connect', function () {
node.status({ fill: "green", shape: "dot", text: "connected" });
});
attachEvents(ami, 'error close', function () {
node.status({ fill: "red", shape: "ring", text: "disconnected" });
});
attachEvents(ami, 'managerevent', function (data) {
if (filterEvent(events, data)){
node.send([{ payload: data }, null]);
}
});
attachEvents(ami, 'rawevent', function (data) {
node.send([null, { payload: data }]);
});
node.on('input', function (msg) {
ami.action(msg.payload, function (err, res) {});
});
node.on('close', function(removed, done) {
ami.disconnect();
ami.on('close', function emitDone(){
done();
ami.removeListener('close', emitDone);
});
});
ami.keepConnected();
}
RED.nodes.registerType("VocalRec-VMI", VocalRec, {
credentials: {
username: { type: "text" },
password: { type: "password" }
}
});
}