cherry-spotify
Version:
Spotify plugin for cherry home automation via spop
68 lines (54 loc) • 1.44 kB
JavaScript
var net = require("net");
/**
* Spop specific log function
*/
function log() {
Array.prototype.unshift.call(arguments, "[cherry-spotify]");
console.log.apply(console, arguments);
}
module.exports = function (ec) {
var ip = ec.config.spop_ip;
var port = ec.config.spop_port;
var socket;
function tcp_connect () {
if (typeof socket !== "undefined") {
socket.destroy();
}
socket = new net.Socket();
socket.on('error', function (err) {
log('socket error, trying to reconnect', err);
tcp_connect();
});
socket.on('connect', function() {
log("connected to spop daemon");
});
var buffer = "";
var once = false;
socket.on('data', function (data) {
var text = data.toString('utf8');
buffer += text;
if (text[text.length - 1] === '\n') {
var message = buffer.trim();
// empty the buffer for the next message
buffer = "";
if (!once) {
// first message from Spop, should be the version number
log(message);
once = true;
} else {
try {
var obj = JSON.parse(message);
ec.produce({from: 'spop', body: obj});
} catch (err) {
log('caught', err, message);
}
}
}
});
socket.connect(port, ip);
}
tcp_connect();
ec.register('spop', function (cmd) {
socket.write(cmd + '\n');
});
}