From cc37caf8038d23aff7718df549e9aa6e97640a18 Mon Sep 17 00:00:00 2001 From: HanzZ Date: Tue, 9 Aug 2011 00:45:51 +0200 Subject: [PATCH] Don't handle unavailable presence if we know that we're reconnecting and removing user --- src/usermanager.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/usermanager.cpp b/src/usermanager.cpp index 23894736..8dbef0a5 100644 --- a/src/usermanager.cpp +++ b/src/usermanager.cpp @@ -100,7 +100,7 @@ int UserManager::getUserCount() { void UserManager::handlePresence(Swift::Presence::ref presence) { std::string barejid = presence->getTo().toBare().toString(); std::string userkey = presence->getFrom().toBare().toString(); - + std::cout << "PRESENCE " << presence->getType() << "\n"; User *user = getUser(userkey); if (!user) { if (CONFIG_STRING(m_component->getConfig(), "service.admin_username") == presence->getFrom().getNode()) { @@ -212,9 +212,11 @@ void UserManager::handleRemoveTimeout(const std::string jid, bool reconnect) { msg->setTo(user->getJID().toBare()); msg->setFrom(m_component->getJID()); m_component->getStanzaChannel()->sendMessage(msg); - if (m_component->inServerMode()) { - dynamic_cast(m_component->getStanzaChannel())->finishSession(user->getJID().toBare(), boost::shared_ptr(new Swift::StreamError())); - } + m_component->onUserPresenceReceived.disconnect(bind(&UserManager::handlePresence, this, _1)); + if (m_component->inServerMode()) { + dynamic_cast(m_component->getStanzaChannel())->finishSession(user->getJID().toBare(), boost::shared_ptr(new Swift::StreamError())); + } + m_component->onUserPresenceReceived.connect(bind(&UserManager::handlePresence, this, _1)); } removeUser(user); }