UNPKG

acebase-ipc-server

Version:

IPC Server that provides communication between isolated AceBase processes using the same database files, such as local pm2 and cloud-based clusters.

64 lines 2.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SimpleObservable = void 0; /** * Very basic Observable implementation * @example * // Create an observable for messages received through a websocket * const messageObservable = new SimpleObservable(observer => { * const ws = new WebSocket('ws://myserver/connect'); * ws.addEventListener('message', event => { * observer.next(event.data); * }) * return function cleanup() { * ws.close(); * } * }); * * // Subscribe to received messages: * const subscription = messageObservable.subscribe(msg => { * console.log(`Received message:`, msg) * }); * * // Stop subscription: * subscription.unsubscribe(); */ class SimpleObservable { constructor(create) { this._active = false; this._subscribers = []; this._create = create; } subscribe(subscriber) { if (!this._active) { const next = (value) => { // emit value to all subscribers this._subscribers.forEach(s => { try { s(value); } catch (err) { console.error(`Error in subscriber callback:`, err); } }); }; const observer = { next }; this._cleanup = this._create(observer); this._active = true; } this._subscribers.push(subscriber); const unsubscribe = () => { this._subscribers.splice(this._subscribers.indexOf(subscriber), 1); if (this._subscribers.length === 0) { this._active = false; this._cleanup && this._cleanup(); } }; const subscription = { unsubscribe }; return subscription; } } exports.SimpleObservable = SimpleObservable; //# sourceMappingURL=simple-observable.js.map