From 559c08d5fbc9739ee0265d9b92d9f7d5aea8ef1e Mon Sep 17 00:00:00 2001 From: yflory Date: Mon, 27 Oct 2025 12:15:09 +0100 Subject: [PATCH] Use Set instead of Array in api.js --- lib/api.js | 28 +++++++++++++++------------- lib/storage/file.js | 8 ++++---- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/lib/api.js b/lib/api.js index eec25ea35..416175f49 100644 --- a/lib/api.js +++ b/lib/api.js @@ -173,16 +173,16 @@ nThen(function (w) { let oldUsers = Env.maxConcurrentRegUsers || 0; let stats = Server.getSessionStats(); let chans = Server.getActiveChannelCount(); - let reg = 0; - let regKeys = []; - Object.keys(Env.netfluxUsers).forEach(id => { - let keys = Env.netfluxUsers[id]; - let key = Object.keys(keys || {})[0]; - if (!key) { return; } - if (regKeys.includes(key)) { return; } - reg++; - regKeys.push(key); - }); + + const map = Env.netfluxUsers; + // Extract public key from each ws connection + let regKeys = Object.keys(map).map(id => { + return Object.keys(map[id] || {})[0]; + }).filter(Boolean); + // Convert to set to get only unique values + let regSet = new Set(regKeys); + const reg = regSet.size; + Env.maxConcurrentWs = Math.max(oldWs, stats.total); Env.maxConcurrentUniqueWs = Math.max(oldUniqueWs, stats.unique); Env.maxConcurrentRegUsers = Math.max(oldUsers, reg); @@ -194,9 +194,10 @@ nThen(function (w) { try { let users = Env.netfluxUsers || {}; let online = Server.getOnlineUsers() || []; + let onlineSet = new Set(online); let removed = 0; Object.keys(users).forEach(id => { - if (!online.includes(id)) { + if (!onlineSet.has(id)) { delete users[id]; removed++; } @@ -209,15 +210,16 @@ nThen(function (w) { let HK = require('./hk-utils'); let chans = Env.channel_cache || {}; let active = Server.getActiveChannels() || []; + let activeSet = new Set(active); let removed = 0; Object.keys(chans).forEach(id => { - if (!active.includes(id)) { + if (!activeSet.has(id)) { HK.dropChannel(Env, id); removed++; } }); if (Env.store) { - Env.store.closeInactiveChannels(active); + Env.store.closeInactiveChannels(activeSet); } if (removed) { Env.Log.info("CLEANED_ACTIVE_CHANNELS_MAP", {removed}); diff --git a/lib/storage/file.js b/lib/storage/file.js index b6b42a1c1..76563d1e2 100644 --- a/lib/storage/file.js +++ b/lib/storage/file.js @@ -286,9 +286,9 @@ var closeChannel = function (env, channelName, cb) { } }; -var closeInactiveChannels = function (env, schedule, active) { +var closeInactiveChannels = function (env, schedule, activeSet) { Object.keys(env.channels).forEach(channelName => { - if (!active.includes(channelName)) { + if (!activeSet.has(channelName)) { schedule.ordered(channelName, function (next) { closeChannel(env, channelName, next); }); @@ -1473,8 +1473,8 @@ module.exports.create = function (conf, _cb) { closeChannel(env, channelName, Util.both(cb, next)); }); }, - closeInactiveChannels: function (active) { - closeInactiveChannels(env, schedule, active); + closeInactiveChannels: function (activeSet) { + closeInactiveChannels(env, schedule, activeSet); }, // write to a log file log: function (channelName, content, cb) {