From e03604de6de578454ddb34e5b9c225bae5698780 Mon Sep 17 00:00:00 2001 From: prozacx Date: Tue, 14 Feb 2006 07:07:30 +0000 Subject: [PATCH] Better handling of deletion of servers git-svn-id: https://znc.svn.sourceforge.net/svnroot/znc/trunk@656 726aef4b-f618-498e-8847-2d620e286838 --- Client.cpp | 7 ++++--- User.cpp | 27 +++++++++++++++++++++++++-- 2 files changed, 29 insertions(+), 5 deletions(-) diff --git a/Client.cpp b/Client.cpp index fceffc19..2138d384 100644 --- a/Client.cpp +++ b/Client.cpp @@ -190,7 +190,7 @@ void CClient::ReadLine(const CString& sData) { sLine += " :" + sMessage; } } else if (sCommand.CaseCmp("QUIT") == 0) { - if (m_pIRCSock) { + if (m_pUser) { m_pUser->UserDisconnected(this); } @@ -1232,11 +1232,12 @@ void CClient::ConnectionRefused() { } void CClient::Disconnected() { - if (m_pIRCSock) { + if (m_pUser) { m_pUser->UserDisconnected(this); - m_pIRCSock = NULL; } + m_pIRCSock = NULL; + #ifdef _MODULES CZNC::Get().GetModules().SetClient(this); VOIDMODULECALL(OnUserDetached()); diff --git a/User.cpp b/User.cpp index f3002eeb..97af9b78 100644 --- a/User.cpp +++ b/User.cpp @@ -601,9 +601,32 @@ bool CUser::DelServer(const CString& sName) { return false; } - for (vector::iterator it = m_vServers.begin(); it != m_vServers.end(); it++) { - if ((*it)->GetName().CaseCmp(sName) == 0) { + unsigned int a = 0; + + for (vector::iterator it = m_vServers.begin(); it != m_vServers.end(); it++, a++) { + CServer* pServer = *it; + + if (pServer->GetName().CaseCmp(sName) == 0) { + CServer* pCurServer = GetCurrentServer(); m_vServers.erase(it); + + if (pServer == pCurServer) { + CIRCSock* pIRCSock = GetIRCSock(); + + if (m_uServerIdx) { + m_uServerIdx--; + } + + if (pIRCSock) { + pIRCSock->Close(); + PutUser("Your current server was removed, jumping..."); + } + } else if (m_uServerIdx >= m_vServers.size()) { + m_uServerIdx = 0; + } + + delete pServer; + return true; } }