@aimee-blue/ab-service-kit
Version:
Aimee Blue Service Template
63 lines (53 loc) • 1.99 kB
JavaScript
;
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