UNPKG

@aimee-blue/ab-service-kit

Version:
63 lines (53 loc) 1.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.createSocketRegistry = createSocketRegistry; exports.getRegistry = getRegistry; var _ws = _interopRequireDefault(require("ws")); var _buildOnConnectionListener = require("./buildOnConnectionListener"); var _socketRegistryState = require("./socketRegistryState"); var _buildServerUpgradeListener = require("./buildServerUpgradeListener"); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function createSocketRegistry(server, epicsByPath, logger) { const state = { epicsByPath, sockets: new Map(), logger }; const api = (0, _socketRegistryState.buildRegistryStateApi)(state); const wss = new _ws.default.Server({ noServer: true }); wss.on('error', error => { logger.log('💥 ', error); }); const onConnection = (0, _buildOnConnectionListener.buildOnConnectionListener)(() => state.epicsByPath, api.closeSocket, api.attachToSocket, logger); wss.on('connection', onConnection); const upgradeListener = (0, _buildServerUpgradeListener.buildServerUpgradeListener)(wss, () => state.epicsByPath, api.addSocket, logger); server.addListener('upgrade', upgradeListener); return { initialize: newEpicsByPath => { state.epicsByPath = newEpicsByPath; for (const socketState of state.sockets.values()) { onConnection(socketState.ws, socketState.request); } }, deinitialize: async () => { for (const socketState of state.sockets.values()) { api.detachFromSocketInWatchMode(socketState.id); } }, destroy: async () => { server.removeListener('upgrade', upgradeListener); await api.onServerClose(); } }; } function getRegistry(server, epicsByPath, logger) { if (server.registry) { return server.registry; } return server.registry = createSocketRegistry(server, epicsByPath, logger); } //# sourceMappingURL=socketRegistry.js.map