vtally
Version:
An affordable and reliable Tally Light that works via WiFi based on NodeMCU / ESP8266. Supports multiple video mixers.
38 lines (37 loc) • 1.34 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SocketAwareEvent = void 0;
/* Takes care that an event on the server is passed through
* a socket to the browser.
*
* The heavy lifting it does is making sure events are registered
* and unregistered accordingly. This should prevent dangling event
* listeners as much as possible.
*/
class SocketAwareEvent {
constructor(eventEmitter, eventName, socket, fnc) {
this.eventEmitter = eventEmitter;
this.socket = socket;
this.eventName = eventName;
this.eventListener = (...args) => {
fnc(socket, ...args);
};
this.isRegistered = false;
}
register() {
if (!this.isRegistered) {
console.debug(`Connecting event ${this.eventName} to socket ${this.socket.id}`);
this.eventEmitter.on(this.eventName, this.eventListener);
this.socket.on("disconnect", () => this.unregister());
this.isRegistered = true;
}
}
unregister() {
if (this.isRegistered) {
console.debug(`Detatching event ${this.eventName} from socket ${this.socket.id}`);
}
this.eventEmitter.off(this.eventName, this.eventListener);
this.isRegistered = false;
}
}
exports.SocketAwareEvent = SocketAwareEvent;