Added DeleteUser() FindUser() and a method for deleting users

git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@405 726aef4b-f618-498e-8847-2d620e286838
This commit is contained in:
prozacx
2005-07-04 23:14:43 +00:00
parent 4796f3cb16
commit c315a07d1e
2 changed files with 67 additions and 1 deletions
+63 -1
View File
@@ -65,6 +65,30 @@ int CZNC::Loop() {
m_itUserIter = m_msUsers.begin();
while (true) {
// Check for users that need to be deleted
if (m_ssDelUsers.size()) {
for (set<CUser*>::iterator it = m_ssDelUsers.begin(); it != m_ssDelUsers.end(); it++) {
CUser* pUser = *it;
m_msUsers.erase(pUser->GetUserName());
CUserSock* pUserSock = pUser->GetUserSock();
if (pUserSock) {
m_Manager.DelSockByAddr(pUserSock);
}
CIRCSock* pIRCSock = pUser->GetIRCSock();
if (pIRCSock) {
m_Manager.DelSockByAddr(pIRCSock);
}
delete pUser;
}
m_ssDelUsers.clear();
m_itUserIter = m_msUsers.begin();
}
m_Manager.Loop();
if (m_bISpoofLocked) {
@@ -75,6 +99,11 @@ int CZNC::Loop() {
m_itUserIter = m_msUsers.begin();
}
if (m_msUsers.empty()) {
usleep(10000);
continue;
}
CString sSockName = "IRC::" + m_itUserIter->first;
CUser* pUser = m_itUserIter->second;
@@ -618,7 +647,7 @@ bool CZNC::ParseConfig(const CString& sConfig) {
return false;
}
m_msUsers[pUser->GetUserName()] = pUser;
AddUser(pUser);
pUser = NULL;
continue;
@@ -944,3 +973,36 @@ CString CZNC::FindModPath(const CString& sModule) const {
return sModPath;
}
CUser* CZNC::FindUser(const CString& sUsername) {
map<CString,CUser*>::iterator it = m_msUsers.find(sUsername);
if (it != m_msUsers.end()) {
return it->second;
}
return NULL;
}
bool CZNC::DeleteUser(const CString& sUsername) {
CUser* pUser = FindUser(sUsername);
if (!pUser) {
return false;
}
m_ssDelUsers.insert(pUser);
return true;
}
bool CZNC::AddUser(CUser* pUser) {
CString sErr;
if (pUser->IsValid(sErr)) {
m_msUsers[pUser->GetUserName()] = pUser;
return true;
}
DEBUG_ONLY(cout << "Invalid user [" << pUser->GetUserName() << "] - [" << sErr << "]" << endl);
return false;
}