Added preliminary support for multiple clients per user

git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@547 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
prozacx
2005-10-09 08:40:40 +00:00
parent a26fdbdf91
commit aaec84a317
12 changed files with 283 additions and 230 deletions
+26 -3
View File
@@ -142,7 +142,7 @@ void CUserSock::ReadLine(const CString& sData) {
}
} else if (sCommand.CaseCmp("QUIT") == 0) {
if (m_pIRCSock) {
m_pIRCSock->UserDisconnected();
m_pUser->UserDisconnected(this);
}
Close(); // Treat a client quit as a detach
@@ -168,9 +168,13 @@ void CUserSock::ReadLine(const CString& sData) {
CModule* pModule = CZNC::Get().GetModules().FindModule(sModule);
if (pModule) {
pModule->SetUserSock(this);
pModule->OnModNotice(sMsg);
pModule->SetUserSock(NULL);
} else if ((pModule = m_pUser->GetModules().FindModule(sModule))) {
pModule->SetUserSock(this);
pModule->OnModNotice(sMsg);
pModule->SetUserSock(NULL);
} else {
PutStatus("No such module [" + sModule + "]");
}
@@ -318,7 +322,9 @@ void CUserSock::ReadLine(const CString& sData) {
CModule* pModule = m_pUser->GetModules().FindModule(sModule);
if (pModule) {
pModule->SetUserSock(this);
pModule->OnModCTCP(sCTCP);
pModule->SetUserSock(NULL);
} else {
PutStatus("No such module [" + sModule + "]");
}
@@ -349,7 +355,9 @@ void CUserSock::ReadLine(const CString& sData) {
CModule* pModule = m_pUser->GetModules().FindModule(sModule);
if (pModule) {
pModule->SetUserSock(this);
pModule->OnModCommand(sMsg);
pModule->SetUserSock(NULL);
} else {
PutStatus("No such module [" + sModule + "]");
}
@@ -369,6 +377,21 @@ void CUserSock::ReadLine(const CString& sData) {
}
PutIRC("PRIVMSG " + sTarget + " :" + sMsg);
// Relay to the rest of the clients that may be connected to this user
if (m_pUser && m_pUser->IsChan(sTarget)) {
vector<CUserSock*>& vUserSocks = m_pUser->GetUserSocks();
for (unsigned int a = 0; a < vUserSocks.size(); a++) {
CUserSock* pUserSock = vUserSocks[a];
if (pUserSock != this) {
pUserSock->PutServ(":" + GetNickMask() + " PRIVMSG " + sTarget + " :" + sMsg);
}
}
}
return;
}
@@ -974,7 +997,7 @@ void CUserSock::AuthUser() {
if (pIRCSock) {
m_pIRCSock = pIRCSock;
pIRCSock->UserConnected(this);
m_pUser->UserConnected(this);
}
VOIDMODULECALL(OnUserAttached());
@@ -992,7 +1015,7 @@ void CUserSock::ConnectionRefused() {
void CUserSock::Disconnected() {
if (m_pIRCSock) {
m_pIRCSock->UserDisconnected();
m_pUser->UserDisconnected(this);
m_pIRCSock = NULL;
}