UNPKG

monode

Version:

Toolkit for the monome and arc osc controllers

83 lines (72 loc) 2.26 kB
/* 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);