hackcentercontrol/nodeartnet/app.js

91 lines
2.6 KiB
JavaScript

var config = "ctdo"
var express = require('express');
var app = express();
var server = require('http').createServer(app), io = require('socket.io').listen(server);
var osc = require('node-osc');
var oscMap = require("./configs/" + config + "/oscMap.json");
var states = require("./configs/" + config + "/states.json");
var fs = require('fs');
var host = process.argv.length > 2 ? process.argv[2] : '195.160.169.33'
var port = process.argv.length > 3 ? process.argv[3] : '9000';
var oscSender = new osc.Client(host, port);
var oscReceiver = new osc.Server(3333, '0.0.0.0');
var artnetclient = require('./node_modules/artnet/lib/artnet_client');
var dmxClient = artnetclient.createClient("195.160.169.15", 6454);
var dmxData = new Array(512);
for(var i=0; i<512;i++) {
dmxData[i] = 0;
}
server.listen(8081);
app.use(express.static('bootstrap'));
app.get('/', function (req, res) {
res.sendfile(__dirname + '/configs/' + config + '/index.html');
});
io.sockets.on('connection', function (socket) {
var address = socket.handshake.address;
console.log("New connection from " + address.address + ":" + address.port);
socket.on('oscmessage', function (data) {
var chan = data.chan;
var value = data.val;
// hier noch nicht einkommentieren, das sendet das sofort ins hackcenter
//oscSender.send(chan, value);
handleMessage(new Array(chan, value))
//console.log(address, chan, value);
});
});
oscReceiver.on("message", function (msg, rinfo) {
handleMessage(msg)
});
function handleMessage(msg) {
console.log("Message:");
console.log(msg);
var chan = msg[0],
value = msg[1];
if(chan == null) return;
// sync states array with value
if(value == null) {
if(states[chan] == null) {
states[chan] = 1
} else if(states[chan] == 1) {
states[chan] = 0;
} else if(states[chan] == 0) {
states[chan] = 1;
}
value = states[chan];
} else {
states[chan] = value;
}
// get mapped dmx channel
if(oscMap[chan] != null) {
dmxData[oscMap[chan]-1] = Math.round(value*255);
console.log(Math.round(value*255));
dmxClient.send(dmxData);
}
// update osc devices to show the current state
// to be done in extra function (with whole states array?)
updateDevices();
fs.writeFile("./configs/" + config + "/states.json", JSON.stringify(states, null, 4));
}
function updateDevices() {
for(var chan in states) {
oscSender.send(chan, states[chan]);
console.log(chan);
}
}