Fixed crash in removig XMPPLayer

This commit is contained in:
HanzZ 2011-07-20 03:02:50 +02:00
parent e31c077947
commit 629e93e34b
3 changed files with 13 additions and 1 deletions

View file

@ -89,6 +89,7 @@ class UserManager {
void handleGeneralPresenceReceived(Swift::Presence::ref presence);
void handleProbePresence(Swift::Presence::ref presence);
void handleSubscription(Swift::Presence::ref presence);
void handleRemoveTimeout(User *user);
// void handleDiscoInfoResponse(boost::shared_ptr<Swift::DiscoInfo> info, Swift::ErrorPayload::ref error, const Swift::JID& jid);
void addUser(User *user);
@ -99,6 +100,7 @@ class UserManager {
StorageBackend *m_storageBackend;
StorageResponder *m_storageResponder;
UserRegistry *m_userRegistry;
Swift::Timer::ref m_removeTimer;
friend class RosterResponder;
};

View file

@ -227,6 +227,9 @@ void NetworkPluginServer::handleSessionFinished(Backend *c) {
(*it)->handleDisconnected("Internal Server Error, please reconnect.");
}
// c->connection->onDisconnected.connect(boost::bind(&NetworkPluginServer::handleSessionFinished, this, c));
// c->connection->onDataRead.connect(boost::bind(&NetworkPluginServer::handleDataRead, this, c, _1));
m_clients.remove(c);
delete c;

View file

@ -53,6 +53,8 @@ UserManager::UserManager(Component *component, UserRegistry *userRegistry, Stora
m_userRegistry->onConnectUser.connect(bind(&UserManager::connectUser, this, _1));
// component->onDiscoInfoResponse.connect(bind(&UserManager::handleDiscoInfoResponse, this, _1, _2, _3));
m_removeTimer = m_component->getNetworkFactories()->getTimerFactory()->createTimer(1);
}
UserManager::~UserManager(){
@ -186,7 +188,8 @@ void UserManager::handlePresence(Swift::Presence::ref presence) {
Swift::Presence::ref highest = m_component->getPresenceOracle()->getHighestPriorityPresence(presence->getFrom().toBare());
// There's no presence for this user, so disconnect
if (!highest || (highest && highest->getType() == Swift::Presence::Unavailable)) {
removeUser(user);
m_removeTimer->onTick.connect(boost::bind(&UserManager::handleRemoveTimeout, this, user));
m_removeTimer->start();
}
}
// TODO: HANDLE MUC SOMEHOW
@ -196,6 +199,10 @@ void UserManager::handlePresence(Swift::Presence::ref presence) {
}
}
void UserManager::handleRemoveTimeout(User *user) {
removeUser(user);
}
void UserManager::handleMessageReceived(Swift::Message::ref message) {
User *user = getUser(message->getFrom().toBare().toString());
if (!user ){