@showbridge/lib
Version:
Main library for showbridge protocol router
60 lines (59 loc) • 2.32 kB
JavaScript
import { toBuffer } from 'osc-min';
import { logger } from '../utils/index.js';
import Action from './action.js';
class OSCOutputAction extends Action {
_run(_msg, vars, protocols) {
const msg = this.getTransformedMessage(_msg, vars);
try {
const resolvedParams = this.resolveTemplatedParams({ msg, vars });
if (resolvedParams === undefined) {
logger.error('action: params need to be set for osc-output action');
return;
}
if (resolvedParams.address === undefined) {
logger.error('action: either address or _address property need to be set for osc-output action');
return;
}
if (resolvedParams.args === undefined) {
resolvedParams.args = [];
}
const typedArgs = resolvedParams.args.map((arg) => {
const typedArg = {
type: 'string',
value: arg,
};
switch (typeof arg) {
case 'number':
typedArg.type = Number.isInteger(arg) ? 'integer' : 'float';
break;
case 'boolean':
typedArg.type = arg ? 'true' : 'false';
break;
case 'string':
default:
break;
}
return typedArg;
});
const outBuff = toBuffer({
address: resolvedParams.address,
args: typedArgs,
oscType: 'message',
});
if (resolvedParams.protocol === 'udp') {
protocols.udp.send(outBuff, resolvedParams.port, resolvedParams.host);
}
else if (resolvedParams.protocol === 'tcp') {
protocols.tcp.send(outBuff, resolvedParams.port, resolvedParams.host, true);
}
else {
logger.error(`action: unhandled osc output protocol = ${resolvedParams.protocol}`);
}
}
catch (error) {
logger.error(`action: problem executing osc-output action - ${error}`);
}
this.emit('finished');
}
}
export default OSCOutputAction;