Fixed crash in removig XMPPLayer
This commit is contained in:
parent
e31c077947
commit
629e93e34b
3 changed files with 13 additions and 1 deletions
|
@ -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;
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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 ){
|
||||
|
|
Loading…
Add table
Reference in a new issue