@simplito/privmx-webendpoint
Version:
PrivMX Web Endpoint library
117 lines (116 loc) • 3.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventManager = void 0;
const subscriptions_1 = require("./subscriptions");
const managers_1 = require("./managers");
function normalizeConnectionEvent(e) {
switch (e.type) {
case "libDisconnected":
return {
...e,
subscriptions: [
`${e.connectionId}/${managers_1.ConnectionChannels[subscriptions_1.ConnectionStatusEventType.LIB_DISCONNECTED]}`,
],
};
case "libPlatformDisconnected":
return {
...e,
subscriptions: [
`${e.connectionId}/${managers_1.ConnectionChannels[subscriptions_1.ConnectionStatusEventType.LIB_PLATFORM_DISCONNECTED]}`,
],
};
case "libConnected":
return {
...e,
subscriptions: [
`${e.connectionId}/${managers_1.ConnectionChannels[subscriptions_1.ConnectionStatusEventType.LIB_CONNECTED]}`,
],
};
default:
return e;
}
}
class EventManager {
_isEventLoopRunning = false;
dispatchers = [];
eventsQueue = null;
constructor() { }
listenForEvents() {
if (this.eventsQueue) {
this.eventsQueue
.waitEvent()
.then((event) => {
this.onEvent(event);
this.listenForEvents();
})
.catch(() => {
this.listenForEvents();
});
}
}
static startEventLoop(eventQueue) {
const manager = new EventManager();
manager.eventsQueue = eventQueue;
manager._isEventLoopRunning = true;
manager.eventsQueue
.waitEvent()
.then((event) => {
if (!manager._isEventLoopRunning)
return;
manager.onEvent(event);
manager.listenForEvents();
})
.catch(() => {
manager.listenForEvents();
});
return manager;
}
stopEventLoop() {
this._isEventLoopRunning = false;
}
removeAllDispatchers = () => {
this.dispatchers = [];
};
onEvent(event) {
this.dispatchers.forEach((cb) => cb(normalizeConnectionEvent(event)));
}
registerDispatcher(manager) {
this.dispatchers.push((e) => manager.dispatchEvent(e));
}
getThreadEventManager(threadApi) {
const manager = new managers_1.ThreadEventsManager(threadApi);
this.registerDispatcher(manager);
return manager;
}
getStoreEventManager(storeApi) {
const manager = new managers_1.StoreEventsManager(storeApi);
this.registerDispatcher(manager);
return manager;
}
getKvdbEventManager(kvdbApi) {
const manager = new managers_1.KvdbEventsManager(kvdbApi);
this.registerDispatcher(manager);
return manager;
}
getInboxEventManager(inboxApi) {
const manager = new managers_1.InboxEventsManager(inboxApi);
this.registerDispatcher(manager);
return manager;
}
getCustomEventsManager(eventApi) {
const manager = new managers_1.CustomEventsManager(eventApi);
this.registerDispatcher(manager);
return manager;
}
getConnectionEventManager(connectionId) {
const manager = new managers_1.ConnectionEventsManager(connectionId);
this.registerDispatcher(manager);
return manager;
}
getUserEventsManager(connectionApi) {
const manager = new managers_1.UserEventsManager(connectionApi);
this.registerDispatcher(manager);
return manager;
}
}
exports.EventManager = EventManager;