@showcomposer/core-io
Version:
io libary for ShowComposer
79 lines (78 loc) • 2.99 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
// Import Utils
const nodelogging_1 = require("@hibas123/nodelogging");
// Import ShowComposer-Modules
const datalib_1 = require("@showcomposer/datalib");
// Import i/o modules
const dmxlib = require("dmxnet");
const dmxnet = new dmxlib.dmxnet({ sName: "ShowComposer", lName: "ShowComposer IO module" });
const data = new datalib_1.Datalib();
class IOArtnet {
// Constructor
constructor(instance, anData) {
this.instance = instance;
const artnetEvent = data.subscribe("io.artnet." + this.instance);
data.dump("io.artnet." + this.instance, () => {
// Subscribe to ArtNet changes
artnetEvent.on("data", (k, d) => {
nodelogging_1.Logging.debug("Artnet " + this.instance + " updated!");
this.anData = data.getLocal("io.artnet." + this.instance);
this.dmxnetInit();
});
this.anData = anData;
this.dmxnetInit();
});
}
dmxnetInit() {
// Set DMXNET-Sender parameters
this.dmxnetIP = this.anData.ip || "255.255.255.255";
this.dmxnetSubnet = this.anData.subnet || 0;
this.dmxnetUniverse = this.anData.universe || 0;
this.dmxnetNet = this.anData.net || 0;
this.dmxnetPort = this.anData.port || 6454;
// Stop old sender
if (this.dmxnetSender) {
this.dmxnetSender.stop();
}
// Create new sender
this.dmxnetSender = dmxnet.newSender({
ip: this.dmxnetIP, net: this.dmxnetNet,
port: this.dmxnetPort, subnet: this.dmxnetSubnet, universe: this.dmxnetUniverse,
});
nodelogging_1.Logging.log("New DMXNET sender to " + this.dmxnetIP + ":" +
this.dmxnetPort + " N:" + this.dmxnetNet + " S:" + this.dmxnetSubnet + " U:" +
this.dmxnetUniverse);
if (!this.anData.source) {
nodelogging_1.Logging.warn("ArtNet " + this.instance + ": Source not given, no output.");
}
else {
this.subChannel(this.anData.source);
}
}
subChannel(src) {
nodelogging_1.Logging.debug("Use " + src + " as source.");
this.channelEvent = data.subscribe(src);
this.channelEvent.on("data", () => {
const srcobj = data.getLocal(src);
if (srcobj.channel) {
this.channel = srcobj.channel;
this.send();
}
});
}
send() {
// Send channels
if (this.channel) {
Object.keys(this.channel).forEach((c) => {
const ch = parseInt(c, 10);
if (ch >= 0 && ch < 512) {
this.dmxnetSender.prepChannel(c, parseInt(this.channel[c], 10));
}
});
this.dmxnetSender.transmit();
nodelogging_1.Logging.debug("Transmit ArtNet");
}
}
}
exports.IOArtnet = IOArtnet;