Changed behavior of NAMES during reattach, znc now simulates the names list itself instead of relying on irc - Added SendBuffer() and call it in JoinUser()

git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@119 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
prozacx
2005-04-07 05:33:10 +00:00
parent 92dc3295f3
commit b1e5bd74bb
+46 -1
View File
@@ -29,6 +29,7 @@ void CChan::JoinUser() {
if (!IsOn()) {
IncClientRequests();
m_pUser->PutIRC("JOIN " + GetName());
return;
}
m_pUser->PutUser(":" + m_pUser->GetIRCNick().GetNickMask() + " JOIN :" + GetName());
@@ -38,12 +39,56 @@ void CChan::JoinUser() {
m_pUser->PutUser(":" + m_pUser->GetIRCServer() + " 333 " + m_pUser->GetIRCNick().GetNick() + " " + GetName() + " " + GetTopicOwner() + " " + CUtils::ToString(GetTopicDate()));
}
m_pUser->PutIRC("NAMES " + GetName());
string sPre = ":" + m_pUser->GetIRCServer() + " 353 " + m_pUser->GetIRCNick().GetNick() + " = " + GetName() + " :";
string sLine = sPre;
for (map<string,CNick*>::iterator a = m_msNicks.begin(); a != m_msNicks.end(); a++) {
if (a->second->IsOp()) {
sLine += "@";
} else if (a->second->IsVoice()) {
sLine += "+";
}
sLine += a->first;
if (sLine.size() >= 490 || a == (--m_msNicks.end())) {
m_pUser->PutUser(sLine);
sLine = sPre;
} else {
sLine += " ";
}
}
m_pUser->PutUser(":" + m_pUser->GetIRCServer() + " 366 " + m_pUser->GetIRCNick().GetNick() + " " + GetName() + " :End of /NAMES list.");
//m_pUser->PutIRC("NAMES " + GetName());
//m_pUser->PutIRC("TOPIC " + GetName());
SendBuffer();
m_bDetached = false;
}
void CChan::SendBuffer() {
if (m_pUser->IsUserAttached()) {
const vector<string>& vsBuffer = GetBuffer();
if (vsBuffer.size()) {
m_pUser->PutUser(":***!znc@znc.com PRIVMSG " + GetName() + " :Buffer Playback...");
for (unsigned int a = 0; a < vsBuffer.size(); a++) {
m_pUser->PutUser(vsBuffer[a]);
}
if (!KeepBuffer()) {
ClearBuffer();
}
m_pUser->PutUser(":***!znc@znc.com PRIVMSG " + GetName() + " :Playback Complete.");
}
}
}
void CChan::DetachUser() {
m_pUser->PutUser(":" + m_pUser->GetIRCNick().GetNickMask() + " PART " + GetName());
m_bDetached = true;