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: case irc.RPL_TOPICWHOTIME:
// Ignore // Ignore
break; break;
case irc.RPL_NAMREPLY: case irc.RPL_ENDOFNAMES:
channel = msg.params[2]; channel = msg.params[1];
let membersList = msg.params[3].split(" ");
return updateBuffer(channel, (buf) => { return updateBuffer(channel, (buf) => {
let members = new irc.CaseMapMap(buf.members); let members = new irc.CaseMapMap(null, buf.members.caseMap);
membersList.forEach((s) => { msg.list.forEach((namreply) => {
let member = irc.parseTargetPrefix(s); let membersList = namreply.params[3].split(" ");
members.set(member.name, member.prefix); membersList.forEach((s) => {
let member = irc.parseTargetPrefix(s);
members.set(member.name, member.prefix);
});
}); });
return { members }; return { members };
}); });
case irc.RPL_ENDOFNAMES:
break; break;
case irc.RPL_WHOREPLY: case irc.RPL_WHOREPLY:
case irc.RPL_WHOSPCRPL: case irc.RPL_WHOSPCRPL: