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.
This commit is contained in:
Simon Ser 2021-10-23 20:05:07 +02:00
parent 92043ded2c
commit c4a1f38b33

View File

@ -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: