node-red-contrib-vban
Version:
Nodes to interact with vban protocol
110 lines (109 loc) • 4.53 kB
JavaScript
;
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;