UNPKG

@hyperflake/socket-broker

Version:
49 lines 1.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.SocketList = void 0; class SocketList { constructor() { this.socketGroupMap = {}; this.nonGroupSocketSet = new Set(); } add(socketId) { this.nonGroupSocketSet.add(socketId); } delete(socketId) { this.nonGroupSocketSet.delete(socketId); } addToGroup(groupId, socketId) { if (this.socketGroupMap[groupId]) { this.socketGroupMap[groupId].sockets.add(socketId); } else { this.socketGroupMap[groupId] = { pointer: 0, sockets: new Set([socketId]) }; } } deleteFromGroup(groupId, socketId) { if (!this.socketGroupMap[groupId]) return; this.socketGroupMap[groupId].sockets.delete(socketId); if (this.socketGroupMap[groupId].pointer >= this.socketGroupMap[groupId].sockets.size) { this.socketGroupMap[groupId].pointer = this.socketGroupMap[groupId].sockets.size - 1; } if (this.socketGroupMap[groupId].sockets.size === 0) { delete this.socketGroupMap[groupId]; } } getUniqueSockets() { const uniqueSocketsInGroups = Object.values(this.socketGroupMap).reduce((acc, cur) => { const sockets = Array.from(cur.sockets); if (sockets.length > 0) { const socketId = sockets[cur.pointer]; acc.push(socketId); // Update pointer such that it follows round-robin cur.pointer = (cur.pointer + 1) % sockets.length; } return acc; }, []); return [...uniqueSocketsInGroups, ...Array.from(this.nonGroupSocketSet)]; } } exports.SocketList = SocketList; //# sourceMappingURL=socket-consumer-map.js.map