mirror of
https://gitlab.com/futo-org/fcast.git
synced 2025-07-24 02:46:59 +00:00
Refractored service registration
This commit is contained in:
parent
6b287ad4a6
commit
83259f841d
2 changed files with 35 additions and 143 deletions
|
@ -26,13 +26,13 @@ window.targetAPI.onDisconnect((_event, value: any) => {
|
||||||
const index = connections.indexOf(value.id);
|
const index = connections.indexOf(value.id);
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
connections.splice(index, 1);
|
connections.splice(index, 1);
|
||||||
}
|
|
||||||
|
|
||||||
if (connections.length === 0) {
|
if (connections.length === 0) {
|
||||||
connectionStatusText.textContent = 'Waiting for a connection';
|
connectionStatusText.textContent = 'Waiting for a connection';
|
||||||
connectionStatusSpinner.style.display = 'inline-block';
|
connectionStatusSpinner.style.display = 'inline-block';
|
||||||
connectionStatusCheck.style.display = 'none';
|
connectionStatusCheck.style.display = 'none';
|
||||||
toast("Device disconnected", ToastIcon.INFO);
|
toast("Device disconnected", ToastIcon.INFO);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
|
@ -46,23 +46,11 @@ export class Main {
|
||||||
keepAlive = activity;
|
keepAlive = activity;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// TODO: Fix issue of emitting events to non-existent subscribers after multiple page changes
|
||||||
const voidCb = (message: any) => { message.respond({ returnValue: true, value: {} }); };
|
const voidCb = (message: any) => { message.respond({ returnValue: true, value: {} }); };
|
||||||
const objectCb = (message: any, value: any) => { message.respond({ returnValue: true, value: value }); };
|
const objectCb = (message: any, value: any) => { message.respond({ returnValue: true, value: value }); };
|
||||||
|
|
||||||
let toastClosureCb = null;
|
registerService(service, 'toast', (message: any) => { return objectCb.bind(this, message) });
|
||||||
service.register("toast", (message: any) => {
|
|
||||||
if (message.isSubscription) {
|
|
||||||
toastClosureCb = objectCb.bind(this, message);
|
|
||||||
Main.emitter.on('toast', toastClosureCb);
|
|
||||||
}
|
|
||||||
|
|
||||||
message.respond({ returnValue: true, value: { subscribed: true }});
|
|
||||||
},
|
|
||||||
(message: any) => {
|
|
||||||
Main.logger.info('Canceled toast service subscriber');
|
|
||||||
Main.emitter.off('toast', toastClosureCb);
|
|
||||||
message.respond({ returnValue: true, value: message.payload });
|
|
||||||
});
|
|
||||||
|
|
||||||
service.register("getDeviceInfo", (message: any) => {
|
service.register("getDeviceInfo", (message: any) => {
|
||||||
Main.logger.info("In getDeviceInfo callback");
|
Main.logger.info("In getDeviceInfo callback");
|
||||||
|
@ -73,50 +61,9 @@ export class Main {
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
let connectClosureCb = null;
|
registerService(service, 'connect', (message: any) => { return objectCb.bind(this, message) });
|
||||||
service.register("connect", (message: any) => {
|
registerService(service, 'disconnect', (message: any) => { return objectCb.bind(this, message) });
|
||||||
if (message.isSubscription) {
|
registerService(service, 'ping', (message: any) => { return objectCb.bind(this, message) });
|
||||||
connectClosureCb = objectCb.bind(this, message);
|
|
||||||
Main.emitter.on('connect', connectClosureCb);
|
|
||||||
}
|
|
||||||
|
|
||||||
message.respond({ returnValue: true, value: { subscribed: true }});
|
|
||||||
},
|
|
||||||
(message: any) => {
|
|
||||||
Main.logger.info('Canceled connect service subscriber');
|
|
||||||
Main.emitter.off('connect', connectClosureCb);
|
|
||||||
message.respond({ returnValue: true, value: message.payload });
|
|
||||||
});
|
|
||||||
|
|
||||||
let disconnectClosureCb = null;
|
|
||||||
service.register("disconnect", (message: any) => {
|
|
||||||
if (message.isSubscription) {
|
|
||||||
disconnectClosureCb = objectCb.bind(this, message);
|
|
||||||
Main.emitter.on('disconnect', disconnectClosureCb);
|
|
||||||
}
|
|
||||||
|
|
||||||
message.respond({ returnValue: true, value: { subscribed: true }});
|
|
||||||
},
|
|
||||||
(message: any) => {
|
|
||||||
Main.logger.info('Canceled disconnect service subscriber');
|
|
||||||
Main.emitter.off('disconnect', disconnectClosureCb);
|
|
||||||
message.respond({ returnValue: true, value: message.payload });
|
|
||||||
});
|
|
||||||
|
|
||||||
let pingClosureCb = null;
|
|
||||||
service.register("ping", (message: any) => {
|
|
||||||
if (message.isSubscription) {
|
|
||||||
pingClosureCb = objectCb.bind(this, message);
|
|
||||||
Main.emitter.on('ping', pingClosureCb);
|
|
||||||
}
|
|
||||||
|
|
||||||
message.respond({ returnValue: true, value: { subscribed: true }});
|
|
||||||
},
|
|
||||||
(message: any) => {
|
|
||||||
Main.logger.info('Canceled ping service subscriber');
|
|
||||||
Main.emitter.off('ping', pingClosureCb);
|
|
||||||
message.respond({ returnValue: true, value: message.payload });
|
|
||||||
});
|
|
||||||
|
|
||||||
Main.discoveryService = new DiscoveryService();
|
Main.discoveryService = new DiscoveryService();
|
||||||
Main.discoveryService.start();
|
Main.discoveryService.start();
|
||||||
|
@ -133,22 +80,13 @@ export class Main {
|
||||||
message.respond({ returnValue: true, value: { playData: playData } });
|
message.respond({ returnValue: true, value: { playData: playData } });
|
||||||
};
|
};
|
||||||
|
|
||||||
let pauseClosureCb: any = null;
|
|
||||||
let resumeClosureCb: any = null;
|
|
||||||
let stopClosureCb: any = null;
|
let stopClosureCb: any = null;
|
||||||
|
|
||||||
let seekClosureCb = null;
|
|
||||||
const seekCb = (message: any, seekMessage: SeekMessage) => { message.respond({ returnValue: true, value: seekMessage }); };
|
const seekCb = (message: any, seekMessage: SeekMessage) => { message.respond({ returnValue: true, value: seekMessage }); };
|
||||||
|
|
||||||
let setVolumeClosureCb = null;
|
|
||||||
const setVolumeCb = (message: any, volumeMessage: SetVolumeMessage) => { message.respond({ returnValue: true, value: volumeMessage }); };
|
const setVolumeCb = (message: any, volumeMessage: SetVolumeMessage) => { message.respond({ returnValue: true, value: volumeMessage }); };
|
||||||
|
|
||||||
let setSpeedClosureCb = null;
|
|
||||||
const setSpeedCb = (message: any, speedMessage: SetSpeedMessage) => { message.respond({ returnValue: true, value: speedMessage }); };
|
const setSpeedCb = (message: any, speedMessage: SetSpeedMessage) => { message.respond({ returnValue: true, value: speedMessage }); };
|
||||||
|
|
||||||
// Note: When logging the `message` object, do NOT use JSON.stringify, you can log messages directly. Seems to be a circular reference causing errors...
|
// Note: When logging the `message` object, do NOT use JSON.stringify, you can log messages directly. Seems to be a circular reference causing errors...
|
||||||
// const playService = service.register("play", (message) => {
|
service.register('play', (message: any) => {
|
||||||
service.register("play", (message: any) => {
|
|
||||||
if (message.isSubscription) {
|
if (message.isSubscription) {
|
||||||
playClosureCb = playCb.bind(this, message);
|
playClosureCb = playCb.bind(this, message);
|
||||||
Main.emitter.on('play', playClosureCb);
|
Main.emitter.on('play', playClosureCb);
|
||||||
|
@ -162,35 +100,10 @@ export class Main {
|
||||||
message.respond({ returnValue: true, value: message.payload });
|
message.respond({ returnValue: true, value: message.payload });
|
||||||
});
|
});
|
||||||
|
|
||||||
service.register("pause", (message: any) => {
|
registerService(service, 'pause', (message: any) => { return voidCb.bind(this, message) });
|
||||||
if (message.isSubscription) {
|
registerService(service, 'resume', (message: any) => { return voidCb.bind(this, message) });
|
||||||
pauseClosureCb = voidCb.bind(this, message);
|
|
||||||
Main.emitter.on('pause', pauseClosureCb);
|
|
||||||
}
|
|
||||||
|
|
||||||
message.respond({ returnValue: true, value: { subscribed: true }});
|
service.register('stop', (message: any) => {
|
||||||
},
|
|
||||||
(message: any) => {
|
|
||||||
Main.logger.info('Canceled pause service subscriber');
|
|
||||||
Main.emitter.off('pause', pauseClosureCb);
|
|
||||||
message.respond({ returnValue: true, value: message.payload });
|
|
||||||
});
|
|
||||||
|
|
||||||
service.register("resume", (message: any) => {
|
|
||||||
if (message.isSubscription) {
|
|
||||||
resumeClosureCb = voidCb.bind(this, message);
|
|
||||||
Main.emitter.on('resume', resumeClosureCb);
|
|
||||||
}
|
|
||||||
|
|
||||||
message.respond({ returnValue: true, value: { subscribed: true }});
|
|
||||||
},
|
|
||||||
(message: any) => {
|
|
||||||
Main.logger.info('Canceled resume service subscriber');
|
|
||||||
Main.emitter.off('resume', resumeClosureCb);
|
|
||||||
message.respond({ returnValue: true, value: message.payload });
|
|
||||||
});
|
|
||||||
|
|
||||||
service.register("stop", (message: any) => {
|
|
||||||
playData = null;
|
playData = null;
|
||||||
|
|
||||||
if (message.isSubscription) {
|
if (message.isSubscription) {
|
||||||
|
@ -206,47 +119,9 @@ export class Main {
|
||||||
message.respond({ returnValue: true, value: message.payload });
|
message.respond({ returnValue: true, value: message.payload });
|
||||||
});
|
});
|
||||||
|
|
||||||
service.register("seek", (message: any) => {
|
registerService(service, 'seek', (message: any) => { return seekCb.bind(this, message) });
|
||||||
if (message.isSubscription) {
|
registerService(service, 'setvolume', (message: any) => { return setVolumeCb.bind(this, message) });
|
||||||
seekClosureCb = seekCb.bind(this, message);
|
registerService(service, 'setspeed', (message: any) => { return setSpeedCb.bind(this, message) });
|
||||||
Main.emitter.on('seek', seekClosureCb);
|
|
||||||
}
|
|
||||||
|
|
||||||
message.respond({ returnValue: true, value: { subscribed: true }});
|
|
||||||
},
|
|
||||||
(message: any) => {
|
|
||||||
Main.logger.info('Canceled seek service subscriber');
|
|
||||||
Main.emitter.off('seek', seekClosureCb);
|
|
||||||
message.respond({ returnValue: true, value: message.payload });
|
|
||||||
});
|
|
||||||
|
|
||||||
service.register("setvolume", (message: any) => {
|
|
||||||
if (message.isSubscription) {
|
|
||||||
setVolumeClosureCb = setVolumeCb.bind(this, message);
|
|
||||||
Main.emitter.on('setvolume', setVolumeClosureCb);
|
|
||||||
}
|
|
||||||
|
|
||||||
message.respond({ returnValue: true, value: { subscribed: true }});
|
|
||||||
},
|
|
||||||
(message: any) => {
|
|
||||||
Main.logger.info('Canceled setvolume service subscriber');
|
|
||||||
Main.emitter.off('setvolume', setVolumeClosureCb);
|
|
||||||
message.respond({ returnValue: true, value: message.payload });
|
|
||||||
});
|
|
||||||
|
|
||||||
service.register("setspeed", (message: any) => {
|
|
||||||
if (message.isSubscription) {
|
|
||||||
setSpeedClosureCb = setSpeedCb.bind(this, message);
|
|
||||||
Main.emitter.on('setspeed', setSpeedClosureCb);
|
|
||||||
}
|
|
||||||
|
|
||||||
message.respond({ returnValue: true, value: { subscribed: true }});
|
|
||||||
},
|
|
||||||
(message: any) => {
|
|
||||||
Main.logger.info('Canceled setspeed service subscriber');
|
|
||||||
Main.emitter.off('setspeed', setSpeedClosureCb);
|
|
||||||
message.respond({ returnValue: true, value: message.payload });
|
|
||||||
});
|
|
||||||
|
|
||||||
const listeners = [Main.tcpListenerService, Main.webSocketListenerService];
|
const listeners = [Main.tcpListenerService, Main.webSocketListenerService];
|
||||||
listeners.forEach(l => {
|
listeners.forEach(l => {
|
||||||
|
@ -321,3 +196,20 @@ export async function errorHandler(err: NodeJS.ErrnoException) {
|
||||||
Main.logger.error("Application error:", err);
|
Main.logger.error("Application error:", err);
|
||||||
Main.emitter.emit('toast', { message: err, icon: ToastIcon.ERROR });
|
Main.emitter.emit('toast', { message: err, icon: ToastIcon.ERROR });
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function registerService(service: Service, method: string, callback: (message: any) => any) {
|
||||||
|
let callbackRef = null;
|
||||||
|
service.register(method, (message: any) => {
|
||||||
|
if (message.isSubscription) {
|
||||||
|
callbackRef = callback(message);
|
||||||
|
Main.emitter.on(method, callbackRef);
|
||||||
|
}
|
||||||
|
|
||||||
|
message.respond({ returnValue: true, value: { subscribed: true }});
|
||||||
|
},
|
||||||
|
(message: any) => {
|
||||||
|
Main.logger.info(`Canceled ${method} service subscriber`);
|
||||||
|
Main.emitter.off(method, callbackRef);
|
||||||
|
message.respond({ returnValue: true, value: message.payload });
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue