node-osc
Version:
pyOSC inspired library for sending and receiving OSC messages
51 lines (47 loc) • 1.18 kB
JavaScript
;
var node_dgram = require('node:dgram');
var node_events = require('node:events');
var decode = require('#decode');
class Server extends node_events.EventEmitter {
constructor(port, host='127.0.0.1', cb) {
super();
if (typeof host === 'function') {
cb = host;
host = '127.0.0.1';
}
if (!cb) cb = () => {};
let decoded;
this.port = port;
this.host = host;
this._sock = node_dgram.createSocket({
type: 'udp4',
reuseAddr: true
});
this._sock.bind(port, host);
this._sock.on('listening', () => {
this.emit('listening');
cb();
});
this._sock.on('message', (msg, rinfo) => {
try {
decoded = decode(msg);
}
catch (e) {
const error = new Error(`can't decode incoming message: ${e.message}`);
this.emit('error', error, rinfo);
return;
}
if (decoded.elements) {
this.emit('bundle', decoded, rinfo);
}
else if (decoded) {
this.emit('message', decoded, rinfo);
this.emit(decoded[0], decoded, rinfo);
}
});
}
close(cb) {
this._sock.close(cb);
}
}
module.exports = Server;