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
JavaScript
"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