mirror of
https://github.com/stagehacks/Cue-View.git
synced 2026-08-04 21:37:46 +00:00
120 lines
2.6 KiB
JavaScript
120 lines
2.6 KiB
JavaScript
const _ = require('lodash');
|
|
|
|
exports.defaultName = "Art-Net";
|
|
exports.connectionType = 'UDPsocket';
|
|
exports.heartbeatInterval = 10000;
|
|
exports.searchOptions = {
|
|
type: 'UDPsocket',
|
|
searchBuffer: Buffer.from([65, 114, 116, 45, 78, 101, 116, 0x00, 0x00, 0x20, 0x00, 0x0e, 0x00, 0x00]),
|
|
devicePort: 6454,
|
|
listenPort: 6454,
|
|
validateResponse (msg, info, devices) {
|
|
return msg.toString('utf8', 0, 7) === "Art-Net";
|
|
}
|
|
};
|
|
exports.defaultPort = 6454;
|
|
|
|
exports.ready = function ready(device) {
|
|
const d = device;
|
|
d.data.universes = {};
|
|
d.data.orderedUniverses = [];
|
|
|
|
};
|
|
|
|
exports.data = function data(device, buf) {
|
|
if(buf.length < 18){
|
|
return
|
|
}
|
|
const univ = buf.readUInt8(14);
|
|
const d = device;
|
|
let u = d.data.universes[univ];
|
|
|
|
if(!u){
|
|
d.data.universes[univ] = {};
|
|
u = d.data.universes[univ];
|
|
}
|
|
|
|
u.sequence = buf.readUInt8(12);
|
|
u.net = buf.readUInt8(15);
|
|
u.opCode = buf.readUInt8(9);
|
|
u.version = buf.readUInt16BE(10);
|
|
u.slots = Array.prototype.slice.call(buf, 18);
|
|
d.data.ip = d.addresses[0];
|
|
|
|
if(!_.includes(d.data.orderedUniverses, univ)){
|
|
d.data.orderedUniverses.push(univ);
|
|
d.data.orderedUniverses.sort();
|
|
u.slotElems = [];
|
|
u.slotElemsSet = false;
|
|
|
|
d.draw();
|
|
updateElementsCache(d, d.data.universes, d.data.orderedUniverses);
|
|
|
|
}
|
|
|
|
device.update("universeData", {
|
|
u: univ,
|
|
universe: u
|
|
});
|
|
|
|
|
|
};
|
|
|
|
|
|
exports.heartbeat = function heartbeat(device) {
|
|
|
|
};
|
|
|
|
|
|
|
|
let lastUpdate = Date.now();
|
|
exports.update = function update(device, document, updateType, updateData){
|
|
|
|
const data = updateData;
|
|
const doc = document;
|
|
|
|
if(updateType === "universeData" && data.universe){
|
|
|
|
if(Date.now() - lastUpdate > 1000){
|
|
lastUpdate = Date.now();
|
|
updateElementsCache(device, device.data.universes, device.data.orderedUniverses);
|
|
}
|
|
|
|
const $elem = doc.getElementById(`universe-${data.u}`);
|
|
|
|
if($elem && data.universe.slotElemsSet){
|
|
|
|
for(let i = 0; i < 512; i++){
|
|
data.universe.slotElems[i].innerText = data.universe.slots[i];
|
|
}
|
|
|
|
doc.getElementById(`universe-${data.u}-sequence`).innerText = data.universe.sequence;
|
|
|
|
|
|
}else{
|
|
device.draw();
|
|
updateElementsCache(device, device.data.universes, device.data.orderedUniverses);
|
|
}
|
|
|
|
}else if(updateType === "elementCache"){
|
|
|
|
data.orderedUniverses.forEach(univ => {
|
|
for(let i = 0; i < 512; i++){
|
|
data.universes[univ].slotElems[i] = doc.getElementById(`${univ}-${i}`);
|
|
}
|
|
data.universes[univ].slotElemsSet = true;
|
|
});
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
function updateElementsCache(device, univ, ordered){
|
|
device.update("elementCache", {
|
|
universes: univ,
|
|
orderedUniverses: ordered
|
|
});
|
|
}
|
|
|