UNPKG

@2bit/osc

Version:

osc client/server written by typescript

100 lines 7.85 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const oscmin = require("osc-min"); const dgram_1 = __importDefault(require("dgram")); const events_1 = require("events"); function make_args(args) { const values = args.map(arg => arg.value); values.raw = args; return values; } class Server extends events_1.EventEmitter { constructor(port, options = {}) { var _a, _b; super(); this.port = port; this.options = { host: (_a = options.host) !== null && _a !== void 0 ? _a : '0.0.0.0', strict_mode: (_b = options.strict_mode) !== null && _b !== void 0 ? _b : true }; this.socket = dgram_1.default.createSocket({ type: 'udp4', }); this.addListeners(); this.socket.bind(port, this.options.host, () => { this.emit('bind', false); }); this.socket.on('error', (err) => { super.emit('error', err); const e = err; if (e.code && e.code == 'EADDRINUSE') { this.socket.removeAllListeners(); this.socket.close(() => { console.warn(`WARNING: does port ${port} be binded by another program? please check it. this program will try to bind with "reuseAddr: true". will receive data when port ${port} has become free.`); this.bindWithReuseAddr(); }); } }); } bindWithReuseAddr() { this.socket = dgram_1.default.createSocket({ type: 'udp4', reuseAddr: true }); this.addListeners(); this.socket.bind(this.port, this.options.host, () => { this.emit('bind', true); }); } addListeners() { this.socket.on('listening', () => { this.emit('listening'); }); this.socket.on('error', (err) => { this.emit('error', err); }); this.socket.on('message', (buffer, rinfo) => { try { const message = oscmin.fromBuffer(buffer, this.options.strict_mode !== undefined ? this.options.strict_mode : true); if (message.oscType == 'bundle') { super.emit('bundle', message, rinfo); this.emitBundle(message, rinfo); } else { this.emitMessage(message, rinfo); } } catch (err) { this.emit('parse_error', err, buffer, rinfo); } }); } emitMessage(message, rinfo) { this.emit('message', message.address, make_args(message.args), rinfo); this.emit(message.address, make_args(message.args), rinfo); if (this.listenerCount(message.address) == 0) { this.emit('leaked', message.address, make_args(message.args), rinfo); } } emitBundle(bundle, rinfo) { for (const m of bundle.elements) { if (m.oscType == 'bundle') { this.emitBundle(m, rinfo); } else { this.emitMessage(m, rinfo); } } } on(event, listener) { return super.on(event, listener); } } exports.default = Server; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUVBLGtDQUFtQztBQUVuQyxrREFBMEI7QUFDMUIsbUNBQXNDO0FBY3RDLFNBQVMsU0FBUyxDQUFDLElBQTBCO0lBQ3pDLE1BQU0sTUFBTSxHQUFRLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDL0MsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUM7SUFDbEIsT0FBTyxNQUF1QixDQUFDO0FBQ25DLENBQUM7QUFhRCxNQUFxQixNQUduQixTQUFRLHFCQUFZO0lBR2xCLFlBQTRCLElBQVksRUFDNUIsVUFBbUMsRUFBRTs7UUFFN0MsS0FBSyxFQUFFLENBQUM7UUFIZ0IsU0FBSSxHQUFKLElBQUksQ0FBUTtRQUlwQyxJQUFJLENBQUMsT0FBTyxHQUFHO1lBQ1gsSUFBSSxFQUFFLE1BQUEsT0FBTyxDQUFDLElBQUksbUNBQUksU0FBUztZQUMvQixXQUFXLEVBQUUsTUFBQSxPQUFPLENBQUMsV0FBVyxtQ0FBSSxJQUFJO1NBQzNDLENBQUM7UUFDRixJQUFJLENBQUMsTUFBTSxHQUFHLGVBQUssQ0FBQyxZQUFZLENBQUM7WUFDN0IsSUFBSSxFQUFFLE1BQU07U0FDZixDQUFDLENBQUM7UUFDSCxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRTtZQUMzQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM3QixDQUFDLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLE9BQU8sRUFBRSxDQUFDLEdBQVUsRUFBRSxFQUFF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