mirror of
https://github.com/cpvalente/ontime.git
synced 2026-08-12 19:03:47 +00:00
6ac963684d
* chore: upgrade minor versions * chore: upgrade cypress * chore: upgrade fe dependencies * update readme * update osx images * update readme * upgrade dependencies * upgrade test dependency * feat: add option to input autofill * feat: autofill to the left * chore: update docs * chore: cleanup ci * version bump * style: prevent zero height bar * fix: prevent loosing menu * ux: improve input, no spellcheck or autocomplete * small ux improvements in cuesheets * feat 111/increase maximum number of events * fix: optimistic delete issue with filter * refact: pincode workflow * chore: add versioning to packages
119 lines
3.1 KiB
JavaScript
119 lines
3.1 KiB
JavaScript
import { Server } from 'node-osc';
|
|
|
|
let oscServer = null;
|
|
|
|
/**
|
|
* @description utilty function to shutdown osc server
|
|
*/
|
|
export const shutdownOSCServer = () => {
|
|
if (oscServer != null) oscServer.close();
|
|
};
|
|
|
|
/**
|
|
* @description initialises OSC server
|
|
* @param config
|
|
*/
|
|
export const initiateOSC = (config) => {
|
|
oscServer = new Server(config.port, '0.0.0.0');
|
|
|
|
// error
|
|
oscServer.on('error', console.error);
|
|
|
|
oscServer.on('message', function (msg) {
|
|
// message should look like /ontime/{path}/{args} where
|
|
// ontime: fixed message for app
|
|
// path: command to be called
|
|
// args: extra data, only used on some of the API entries (delay, goto)
|
|
|
|
// split message
|
|
const [, address, path] = msg[0].split('/');
|
|
const args = msg[1];
|
|
|
|
// get first part before (ontime)
|
|
if (address !== 'ontime') {
|
|
console.error(`OSC IN: Message address ${address} not recognised`);
|
|
return;
|
|
}
|
|
|
|
if (path == null) {
|
|
console.error('OSC IN: No path found');
|
|
return;
|
|
}
|
|
|
|
// get second part (command)
|
|
switch (path.toLowerCase()) {
|
|
case 'onair':
|
|
global.timer.setonAir(true);
|
|
break;
|
|
case 'offair':
|
|
global.timer.setonAir(false);
|
|
break;
|
|
case 'start':
|
|
case 'play':
|
|
global.timer.trigger('start');
|
|
break;
|
|
case 'pause':
|
|
global.timer.trigger('pause');
|
|
break;
|
|
case 'prev':
|
|
global.timer.trigger('previous');
|
|
break;
|
|
case 'next':
|
|
global.timer.trigger('next');
|
|
break;
|
|
case 'unload':
|
|
case 'stop':
|
|
global.timer.trigger('unload');
|
|
break;
|
|
case 'reload':
|
|
global.timer.trigger('reload');
|
|
break;
|
|
case 'roll':
|
|
global.timer.trigger('roll');
|
|
break;
|
|
case 'delay':
|
|
try {
|
|
const t = parseInt(args, 10);
|
|
if (isNaN(t)) {
|
|
global.timer.error('RX', `OSC IN: delay time not recognised ${args}`);
|
|
return;
|
|
}
|
|
global.timer.increment(t * 1000 * 60);
|
|
} catch (error) {
|
|
console.log('error parsing: ', error);
|
|
}
|
|
break;
|
|
case 'goto':
|
|
try {
|
|
const eventIndex = parseInt(args, 10);
|
|
if (isNaN(eventIndex) || eventIndex <= 0) {
|
|
global.timer.error(
|
|
'RX',
|
|
`OSC IN: event index not recognised or out of range ${eventIndex}`
|
|
);
|
|
}
|
|
global.timer.loadEventByIndex(eventIndex - 1);
|
|
} catch (error) {
|
|
global.timer.error('RX', `OSC IN: error calling goto ${error}`);
|
|
}
|
|
break;
|
|
case 'gotoid':
|
|
console.log('calling gotoid with', args);
|
|
if (args == null) {
|
|
global.timer.error('RX', `OSC IN: event id not recognised or out of range ${args}}`);
|
|
return;
|
|
}
|
|
try {
|
|
global.timer.loadEventById(args.toString().toLowerCase());
|
|
} catch (error) {
|
|
global.timer.error('RX', `OSC IN: error calling goto ${error}`);
|
|
}
|
|
break;
|
|
|
|
default:
|
|
global.timer.warning('RX', `OSC IN: unhandled message ${path}`);
|
|
break;
|
|
}
|
|
});
|
|
};
|