monode
Version:
Toolkit for the monome and arc osc controllers
83 lines (72 loc) • 2.26 kB
JavaScript
/*
monome
https://github.com/charlesholbrow/node-monome
Copyright (c) 2013 Charles Holbrow
Licensed under the MIT license.
*/
(function() {
'use strict';
var PORT, events, makeGrid, monome, osc;
events = require('events');
makeGrid = require('./grid');
osc = require('./osc');
monome = void 0;
PORT = 45450;
module.exports = function() {
var devices, listen, serialosc;
if (monome) {
return monome;
}
listen = null;
monome = new events.EventEmitter();
monome.devices = devices = {};
serialosc = osc.Client(12002);
osc.Server(PORT, function(error, _listen) {
listen = _listen;
if (error) {
throw new Error('Failed to open main server: ' + error);
}
if (listen.port !== PORT) {
throw new Error('Failed to listen on udp port ' + PORT + '. Is node-monome already running?');
}
listen.on('message', function(msg, info) {
var device, id, port, type;
if (msg[0] === '/serialosc/device' || msg[0] === '/serialosc/add') {
id = msg[1];
type = msg[2];
port = msg[3];
if (!devices[id]) {
console.log('Connect:', msg, '\n');
device = makeGrid(port, type);
devices[id] = device;
device.once('ready', function() {
return monome.emit('device', device);
});
if (type.match(/monome arc \d+/)) {
monome.arc = device;
} else {
monome.grid = device;
}
monome.emit('connect', device);
}
}
if (msg[0] === '/serialosc/remove') {
id = msg[1];
device = devices[id];
if (device) {
console.log('Disconnect:', msg, '\n');
monome.emit('disconnect', device);
device.close();
delete devices[id];
}
}
if (msg[0] === '/serialosc/add' || msg[0] === '/serialosc/remove') {
return serialosc.send('/serialosc/notify', '127.0.0.1', PORT);
}
});
serialosc.send('/serialosc/list', '127.0.0.1', PORT);
return serialosc.send('/serialosc/notify', '127.0.0.1', PORT);
});
return monome;
};
}).call(this);