UNPKG

node-red-contrib-vban

Version:
110 lines (109 loc) 4.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Sender = void 0; const vban_1 = require("vban"); const CustomError_1 = require("./CustomError"); class Sender { constructor(server) { this.server = server; } getSerialStreamType(streamType) { if (!streamType && streamType !== 0) { throw new Error('streamType is needed'); } if (Number(streamType) && vban_1.ESerialStreamType[Number(streamType)]) { return streamType; } else { switch (streamType) { case 'GENERIC': case vban_1.ESerialStreamType.VBAN_SERIAL_GENERIC: return vban_1.ESerialStreamType.VBAN_SERIAL_GENERIC; case 'MIDI': case vban_1.ESerialStreamType.VBAN_SERIAL_MIDI: return vban_1.ESerialStreamType.VBAN_SERIAL_MIDI; default: throw new Error(`unknown stream type ${streamType}`); } } } getSubProtocol(pSubProtocol) { const subProtocol = typeof pSubProtocol === 'string' ? pSubProtocol === null || pSubProtocol === void 0 ? void 0 : pSubProtocol.toUpperCase() : pSubProtocol; switch (subProtocol) { case 'AUDIO': case 0: case vban_1.ESubProtocol.AUDIO: return vban_1.ESubProtocol.AUDIO; case 'SERIAL': case 1: case vban_1.ESubProtocol.SERIAL: return vban_1.ESubProtocol.SERIAL; case 'TXT': case 2: case vban_1.ESubProtocol.TEXT: return vban_1.ESubProtocol.TEXT; case 'SERVICE': case 3: case vban_1.ESubProtocol.SERVICE: return vban_1.ESubProtocol.SERVICE; default: throw new Error(`unknown subProtocol "${pSubProtocol}"`); } } constructVBANObject(packet) { var _a, _b; let returnPacket; switch (this.getSubProtocol(packet.subProtocol)) { case vban_1.ESubProtocol.AUDIO: if (!packet.data) { throw new Error('data are mandatory'); } returnPacket = new vban_1.VBANAudioPacket(Object.assign({ bitResolution: 0, codec: 0, nbChannel: 0, nbSample: 0, sr: 0 }, packet), packet.data); break; case vban_1.ESubProtocol.SERIAL: if (!packet.data) { throw new Error('data are mandatory'); } returnPacket = new vban_1.VBANSerialPacket({ streamName: packet.streamName, formatBit: vban_1.EFormatBit.VBAN_DATATYPE_BYTE8, streamType: this.getSerialStreamType(packet.streamType), bps: packet.bps, bitMode: (_a = packet.bitMode) !== null && _a !== void 0 ? _a : { stop: 1, start: false, parity: false, multipart: false }, channelsIdents: packet.channelsIdents }, packet.data); break; case vban_1.ESubProtocol.TEXT: returnPacket = new vban_1.VBANTEXTPacket({ formatBit: vban_1.EFormatBit.VBAN_DATATYPE_BYTE8, streamName: packet.streamName, encoding: (_b = packet.encoding) !== null && _b !== void 0 ? _b : vban_1.ETextEncoding.VBAN_TXT_UTF8 }, packet.text); break; case vban_1.ESubProtocol.SERVICE: throw new Error(`"${packet.subProtocol}" NOT YET IMPLEMENTED`); break; default: throw new Error(`unknown subProtocol "${packet.subProtocol}"`); } return returnPacket; } send(packet, to) { if (!packet.subProtocol && packet.subProtocol !== vban_1.ESubProtocol.AUDIO) { const text = 'packet need to contain a subProtocol'; throw new CustomError_1.CustomError(text, { packet }); } if (!packet.streamName) { const text = 'packet need to contain a streamName'; throw new CustomError_1.CustomError(text, { packet }); } const newPacket = this.constructVBANObject(packet); this.server.send(newPacket, to.port, to.address); } } exports.Sender = Sender;