this.connect = function() { clearTimeout(disconnectHandler); if (connected) return; console.log("Connect"); connected = true; var device = airtunes.add(argv.host, argv); device.on('error', function(err) { console.log('device error: ' + err); process.exit(1); }); },
function add(speaker, volume) { if (speakers[speaker] && speakers[speaker].device) { console.log('speaker', speaker, 'already added'); return; } volume = volume || 20; console.log('add ' + speakers[speaker].host + ':' + speakers[speaker].port); console.log('mqtt >', config.prefix + '/status/' + speaker + '/connected', 1); mqtt.publish(config.prefix + '/status/' + speaker + '/connected', '1', {retain: true}); speakers[speaker].device = airtunes.add(speakers[speaker].host, { port: speakers[speaker].port, volume: volume, password: speakers[speaker].password }); speakers[speaker].device.on('status', function (status) { console.log('status', speaker, status); if (status === 'ready') { speakers[speaker].connected = true; console.log('mqtt >', config.prefix + '/status/' + speaker + '/connected', 2); mqtt.publish(config.prefix + '/status/' + speaker + '/connected', '2', {retain: true}); } else if (status === 'stopped') { delete speakers[speaker].device; speakers[speaker].connected = false; console.log('mqtt >', config.prefix + '/status/' + speaker + '/connected', 0); mqtt.publish(config.prefix + '/status/' + speaker + '/connected', '0', {retain: true}); } }); speakers[speaker].device.on('error', function (err) { console.log('error', speaker, err); delete speakers[speaker].device; speakers[speaker].connected = false; console.log('mqtt >', config.prefix + '/status/' + speaker + '/connected', 0); mqtt.publish(config.prefix + '/status/' + speaker + '/connected', '0', {retain: true}); }); }
var web = express(); web.get("/", function(req, res) { res.sendfile('resources/index.html'); }); web.get(/^\/(css|js|fonts)\/(.+)$/, function(req, res){ var file = __dirname + '/static/' + req.params[0] + '/' + req.params[1]; res.sendfile(file); }); var device = airtunes.add( argv.airplay_host, { 'port': argv.airplay_port, 'password': argv.airplay_password, 'volume': argv.volume }); var hasStarted = false; device.on('status', function(status) { if (!hasStarted) { console.log('Connected to AirPlay device (' + device.key + ').'); hasStarted = true; } else { // TODO(cvangysel): fix this logic. if (status == 'stopped') { console.log('Another device took control of device ' + device.key + '.');