From c4a1f38b33b68701c8797b9c76b73983644a4a82 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Sat, 23 Oct 2021 20:05:07 +0200 Subject: [PATCH] state: process RPL_NAMREPLY atomically This allows updating the buf.members map only once when receiving RPL_ENDOFNAMES, instead of repeatedly re-creating it each time a RPL_NAMREPLY message is received. --- state.js | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/state.js b/state.js index acf5483..eecf241 100644 --- a/state.js +++ b/state.js @@ -354,19 +354,19 @@ export const State = { case irc.RPL_TOPICWHOTIME: // Ignore break; - case irc.RPL_NAMREPLY: - channel = msg.params[2]; - let membersList = msg.params[3].split(" "); - + case irc.RPL_ENDOFNAMES: + channel = msg.params[1]; return updateBuffer(channel, (buf) => { - let members = new irc.CaseMapMap(buf.members); - membersList.forEach((s) => { - let member = irc.parseTargetPrefix(s); - members.set(member.name, member.prefix); + let members = new irc.CaseMapMap(null, buf.members.caseMap); + msg.list.forEach((namreply) => { + let membersList = namreply.params[3].split(" "); + membersList.forEach((s) => { + let member = irc.parseTargetPrefix(s); + members.set(member.name, member.prefix); + }); }); return { members }; }); - case irc.RPL_ENDOFNAMES: break; case irc.RPL_WHOREPLY: case irc.RPL_WHOSPCRPL: