camstreamerlib
Version:
Helper library for CamStreamer ACAP applications.
64 lines (63 loc) • 1.77 kB
JavaScript
import { cswEventsSchema, } from './types/CamSwitcherEvents';
export class CamSwitcherEvents {
isDestroyed = false;
ws = null;
listeners = {};
setWebsocket(ws) {
if (this.ws) {
this.ws.destroy();
}
this.ws = ws;
this.ws.onmessage = (e) => this.onMessage(e);
}
resendInitData() {
const request = {
command: 'sendInitData',
};
this.ws?.send(JSON.stringify(request));
}
addListener(type, listener, id) {
const typeList = this.listeners[type];
if (typeList === undefined) {
this.listeners[type] = { [id]: listener };
return;
}
typeList[id] = listener;
}
removeListener(type, id) {
const typeList = this.listeners[type];
if (typeList) {
delete typeList[id];
}
}
onMessage(evt) {
if (this.isDestroyed) {
return;
}
try {
const eventData = JSON.parse(evt.data);
const data = cswEventsSchema.parse(eventData);
if (data.type === 'init') {
this.processMessage(data.data, true);
return;
}
this.processMessage(data, false);
}
catch (error) {
console.error('Error parsing event data:', evt.data, error);
}
}
processMessage(event, isInit) {
const listeners = this.listeners[event.type];
const list = Object.values(listeners ?? {});
list.forEach((listener) => listener(event, isInit));
}
destroy() {
this.isDestroyed = true;
if (this.ws) {
this.ws.destroy();
this.ws = null;
}
this.listeners = {};
}
}