diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index 94d3c3cd33cb02b22090c1bde18a6d68af96a828..978cb607594461c99884b91bced3ddb77907b663 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -173,7 +173,7 @@ NetworkPluginServer::~NetworkPluginServer() { } void NetworkPluginServer::handleNewClientConnection(boost::shared_ptr c) { - Client *client = new Client; + Backend *client = new Backend; client->pongReceived = true; client->connection = c; @@ -191,7 +191,7 @@ void NetworkPluginServer::handleNewClientConnection(boost::shared_ptrgetJID().toString()); @@ -203,7 +203,7 @@ void NetworkPluginServer::handleSessionFinished(Client *c) { delete c; // Execute new session only if there's no free one after this crash/disconnection - for (std::list::const_iterator it = m_clients.begin(); it != m_clients.end(); it++) { + for (std::list::const_iterator it = m_clients.begin(); it != m_clients.end(); it++) { if ((*it)->users.size() < CONFIG_INT(m_config, "service.users_per_backend")) { return; } @@ -429,7 +429,7 @@ void NetworkPluginServer::handleAttentionPayload(const std::string &data) { conv->handleMessage(msg); } -void NetworkPluginServer::handleDataRead(Client *c, const Swift::SafeByteArray &data) { +void NetworkPluginServer::handleDataRead(Backend *c, const Swift::SafeByteArray &data) { c->data.insert(c->data.end(), data.begin(), data.end()); while (c->data.size() != 0) { unsigned int expected_size; @@ -509,7 +509,7 @@ void NetworkPluginServer::send(boost::shared_ptr &c, const st void NetworkPluginServer::pingTimeout() { // check ping responses - for (std::list::const_iterator it = m_clients.begin(); it != m_clients.end(); it++) { + for (std::list::const_iterator it = m_clients.begin(); it != m_clients.end(); it++) { if ((*it)->pongReceived) { sendPing((*it)); } @@ -521,10 +521,10 @@ void NetworkPluginServer::pingTimeout() { } void NetworkPluginServer::handleUserCreated(User *user) { - Client *c = getFreeClient(); + Backend *c = getFreeClient(); if (!c) { LOG4CXX_ERROR(logger, "There is no backend to handle user " << user->getJID().toString()); - user->handleDisconnected("Internal Server Error, please reconnect."); + user->handleDisconnected("Internal Server Error (no free backend to handle your session), please reconnect."); return; } user->setData(c); @@ -550,7 +550,7 @@ void NetworkPluginServer::handleUserReadyToConnect(User *user) { WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_LOGIN); - Client *c = (Client *) user->getData(); + Backend *c = (Backend *) user->getData(); send(c->connection, message); } @@ -570,7 +570,7 @@ void NetworkPluginServer::handleUserPresenceChanged(User *user, Swift::Presence: WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_STATUS_CHANGED); - Client *c = (Client *) user->getData(); + Backend *c = (Backend *) user->getData(); send(c->connection, message); } @@ -588,7 +588,7 @@ void NetworkPluginServer::handleRoomJoined(User *user, const std::string &r, con WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_JOIN_ROOM); - Client *c = (Client *) user->getData(); + Backend *c = (Backend *) user->getData(); send(c->connection, message); NetworkConversation *conv = new NetworkConversation(user->getConversationManager(), r, true); @@ -610,7 +610,7 @@ void NetworkPluginServer::handleRoomLeft(User *user, const std::string &r) { WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_LEAVE_ROOM); - Client *c = (Client *) user->getData(); + Backend *c = (Backend *) user->getData(); send(c->connection, message); NetworkConversation *conv = (NetworkConversation *) user->getConversationManager()->getConversation(r); @@ -635,7 +635,7 @@ void NetworkPluginServer::handleUserDestroyed(User *user) { WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_LOGOUT); - Client *c = (Client *) user->getData(); + Backend *c = (Backend *) user->getData(); if (!c) { return; } @@ -677,7 +677,7 @@ void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost WRAP(message, type); - Client *c = (Client *) conv->getConversationManager()->getUser()->getData(); + Backend *c = (Backend *) conv->getConversationManager()->getUser()->getData(); send(c->connection, message); } } @@ -694,7 +694,7 @@ void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_ATTENTION); - Client *c = (Client *) conv->getConversationManager()->getUser()->getData(); + Backend *c = (Backend *) conv->getConversationManager()->getUser()->getData(); send(c->connection, message); return; } @@ -719,7 +719,7 @@ void NetworkPluginServer::handleMessageReceived(NetworkConversation *conv, boost WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_CONV_MESSAGE); - Client *c = (Client *) conv->getConversationManager()->getUser()->getData(); + Backend *c = (Backend *) conv->getConversationManager()->getUser()->getData(); send(c->connection, message); } } @@ -739,7 +739,7 @@ void NetworkPluginServer::handleBuddyRemoved(Buddy *b) { WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_BUDDY_REMOVED); - Client *c = (Client *) user->getData(); + Backend *c = (Backend *) user->getData(); send(c->connection, message); } @@ -762,7 +762,7 @@ void NetworkPluginServer::handleBuddyUpdated(Buddy *b, const Swift::RosterItemPa WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_BUDDY_CHANGED); - Client *c = (Client *) user->getData(); + Backend *c = (Backend *) user->getData(); send(c->connection, message); } @@ -782,7 +782,7 @@ void NetworkPluginServer::handleVCardUpdated(User *user, boost::shared_ptrgetData(); + Backend *c = (Backend *) user->getData(); send(c->connection, message); } @@ -797,11 +797,11 @@ void NetworkPluginServer::handleVCardRequired(User *user, const std::string &nam WRAP(message, pbnetwork::WrapperMessage_Type_TYPE_VCARD); - Client *c = (Client *) user->getData(); + Backend *c = (Backend *) user->getData(); send(c->connection, message); } -void NetworkPluginServer::sendPing(Client *c) { +void NetworkPluginServer::sendPing(Backend *c) { std::string message; pbnetwork::WrapperMessage wrap; @@ -813,14 +813,17 @@ void NetworkPluginServer::sendPing(Client *c) { LOG4CXX_INFO(logger, "PING to " << c); } -NetworkPluginServer::Client *NetworkPluginServer::getFreeClient() { - NetworkPluginServer::Client *c = NULL; +NetworkPluginServer::Backend *NetworkPluginServer::getFreeClient() { + NetworkPluginServer::Backend *c = NULL; bool spawnNew = false; - for (std::list::const_iterator it = m_clients.begin(); it != m_clients.end(); it++) { + for (std::list::const_iterator it = m_clients.begin(); it != m_clients.end(); it++) { + // This backend is free. if ((*it)->users.size() < CONFIG_INT(m_config, "service.users_per_backend")) { - if ((*it)->users.size() + 1 == CONFIG_INT(m_config, "service.users_per_backend")) { + // After this user, this backend could be full, so we have to spawn new one... + if ((*it)->users.size() + 1 >= CONFIG_INT(m_config, "service.users_per_backend")) { spawnNew = true; } + if (c == NULL) { c = *it; }