UNPKG

camstreamerlib

Version:

Helper library for CamStreamer ACAP applications.

64 lines (63 loc) 1.77 kB
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 = {}; } }