From e6ef230f19331562c7e698189047bdddc0cb62c7 Mon Sep 17 00:00:00 2001 From: Szabolcs Szekelyi Date: Fri, 20 Mar 2020 17:15:43 -0400 Subject: [PATCH] Allow dynamic modification of universes the server listens on --- README.md | 2 ++ lib/server.js | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/README.md b/README.md index 302f61a..fa90181 100644 --- a/README.md +++ b/README.md @@ -96,6 +96,8 @@ server.on('packet', function (packet) { }); ``` +Universes to listen for can be added and droppped at any time by calling `addUniverse(universes)` or `dropUniverse(universes)`, respectively. The argument for these methods is an array of universe numbers. + ## E1.31 (sACN) Packet Class The E1.31 Packet class contains a number of useful setter methods: diff --git a/lib/server.js b/lib/server.js index 5f628a1..0b04e79 100644 --- a/lib/server.js +++ b/lib/server.js @@ -80,6 +80,24 @@ Server.prototype.close = function close() { this._socket.close(); }; +Server.prototype.addUniverses = function(universes) { + universes.forEach(universe => { + if (this.universes.includes(universe)) return; + this.universes.push(universe); + this._lastSequenceNumber[universe] = 0; + this._socket.addMembership(e131.getMulticastGroup(universe)); + }); +}; + +Server.prototype.dropUniverses = function(universes) { + universes.forEach(universe => { + if (!this.universes.includes(universe)) return; + this.universes.splice(this.universes.indexOf(universe), 1); + delete this._lastSequenceNumber[universe]; + this._socket.dropMembership(e131.getMulticastGroup(universe)); + }); +}; + // server object inherits from EventEmitter util.inherits(Server, EventEmitter);