diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index ba715562d069e5bd17a6fd86004c6d4a48599a29..4e016af3d911b43f253c0cc98d80bde6b1335a95 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -400,6 +400,30 @@ void NetworkPluginServer::handleConvMessagePayload(const std::string &data, bool conv->handleMessage(msg, payload.nickname()); } +void NetworkPluginServer::handleAttentionPayload(const std::string &data) { + pbnetwork::ConversationMessage payload; + if (payload.ParseFromString(data) == false) { + // TODO: ERROR + return; + } + + User *user = m_userManager->getUser(payload.username()); + if (!user) + return; + + boost::shared_ptr msg(new Swift::Message()); + msg->setBody(payload.message()); + msg->addPayload(boost::make_shared()); + + NetworkConversation *conv = (NetworkConversation *) user->getConversationManager()->getConversation(payload.buddyname()); + if (!conv) { + conv = new NetworkConversation(user->getConversationManager(), payload.buddyname()); + conv->onMessageToSend.connect(boost::bind(&NetworkPluginServer::handleMessageReceived, this, _1, _2)); + } + + conv->handleMessage(msg); +} + void NetworkPluginServer::handleDataRead(Client *c, const Swift::SafeByteArray &data) { c->data.insert(c->data.end(), data.begin(), data.end()); while (c->data.size() != 0) { @@ -463,6 +487,9 @@ void NetworkPluginServer::handleDataRead(Client *c, const Swift::SafeByteArray & case pbnetwork::WrapperMessage_Type_TYPE_AUTH_REQUEST: handleAuthorizationPayload(wrapper.payload()); break; + case pbnetwork::WrapperMessage_Type_TYPE_ATTENTION: + handleAttentionPayload(wrapper.payload()); + break; default: return; }