diff --git a/README.md b/README.md index 302f61a..55a6b6e 100644 --- a/README.md +++ b/README.md @@ -63,6 +63,21 @@ var server = new e131.Server([universes], [port]); ``` The `universes` argument can be an array (for joining multiple universes) or a single integer for joining a single universe. If `universes` is omitted, a single value of `1` is assumed. If `port` is omitted, the default E1.31 port `5568` is used. + +or + +```javascript +var e131 = require('e131'); +var server = new e131.Server({ + universes: [universes], // Multiple universes + // universe: universe, // Single universe + port: 5568, + ip: '192.168.1.12' // IP of the network interface +}); +``` + +All options are optional. Use either `universes` or `universe` but not both. The `ip` option is required when more than one network interface is present. + The server will join the corresponding Multicast groups for each provided universe automatically and starts listening as soon as it is created. The server performs basic out-of-order detection on received packets. If an out-of-order packet is received, it is discarded. diff --git a/lib/server.js b/lib/server.js index 4dd35ba..13cce5e 100644 --- a/lib/server.js +++ b/lib/server.js @@ -32,11 +32,20 @@ function Server(universes, port) { } EventEmitter.call(this); - if (universes !== undefined && !Array.isArray(universes)) { - universes = [universes]; + if (Object.prototype.toString.call(universes) === '[object Object]') { + var options = universes; + this.universes = options.universes || [options.universe] || [0x01]; + this.port = options.port || e131.DEFAULT_PORT; + this.ip = options.ip; + } else { + if (universes !== undefined && !Array.isArray(universes)) { + universes = [universes]; + } + + this.universes = universes || [0x01]; + this.port = port || e131.DEFAULT_PORT; } - this.universes = universes || [0x01]; - this.port = port || e131.DEFAULT_PORT; + this._socket = dgram.createSocket('udp4'); this._lastSequenceNumber = 0; @@ -67,7 +76,12 @@ function Server(universes, port) { this._socket.bind(this.port, function onListening() { self.universes.forEach(function (universe) { var multicastGroup = e131.getMulticastGroup(universe); - self._socket.addMembership(multicastGroup); + + if (this.ip) { + self._socket.addMembership(multicastGroup, this.ip); + } else { + self._socket.addMembership(multicastGroup); + } }); }); }