From f4af24888c35a4d0e6260104a72f8335912a2b80 Mon Sep 17 00:00:00 2001 From: Cathy Fitzpatrick Date: Wed, 6 Oct 2010 22:47:12 -0600 Subject: [PATCH] Implemented private messages. --- src/network/network.cpp | 41 +++++++++++++++++++++++++++++++++++++++-- src/network/network.h | 3 ++- 2 files changed, 41 insertions(+), 3 deletions(-) diff --git a/src/network/network.cpp b/src/network/network.cpp index 7934a7c..9f7bbb9 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -175,7 +175,8 @@ class InMessage { USER_MESSAGE_REQUEST = 17, CLIENT_ACTIVITY = 18, CANCEL_QUEUE = 19, - CANCEL_BATTLE_ACTION = 20 + CANCEL_BATTLE_ACTION = 20, + PRIVATE_MESSAGE = 21 }; InMessage() { @@ -570,6 +571,18 @@ class InvalidTeamMessage : public OutMessage { } }; +class PrivateMessage : public OutMessage { +public: + PrivateMessage(const string &user, const string &sender, + const string &message): + OutMessage(PRIVATE_MESSAGE) { + *this << user; + *this << sender; + *this << message; + finalise(); + } +}; + class MetagameQueue { public: typedef pair QUEUE_ENTRY; @@ -1463,6 +1476,29 @@ class ClientImpl : public Client, public enable_shared_from_this { } } + /** + * string : target of private message + * string : content of private message + */ + void handlePrivateMessage(InMessage &msg) { + string target, content; + msg >> target >> content; + + ClientImplPtr client = m_server->getClient(target); + if (!client) { + // The empty private message denotes that the target does not + // exist. + sendMessage(PrivateMessage(target, string(), string())); + return; + } + if (content.size() > 250) { + content.resize(250); + content += "(truncated)"; + } + sendMessage(PrivateMessage(target, m_name, content)); + client->sendMessage(PrivateMessage(m_name, target, content)); + } + string m_name; int m_id; // user id bool m_authenticated; @@ -1513,7 +1549,8 @@ const ClientImpl::MESSAGE_HANDLER ClientImpl::m_handlers[] = { &ClientImpl::handlePersonalMessageRequest, &ClientImpl::handleActivityMessage, &ClientImpl::handleCancelQueue, - &ClientImpl::handleCancelBattleAction + &ClientImpl::handleCancelBattleAction, + &ClientImpl::handlePrivateMessage }; const int ClientImpl::MESSAGE_COUNT = diff --git a/src/network/network.h b/src/network/network.h index e6ceffa..e39c9e0 100644 --- a/src/network/network.h +++ b/src/network/network.h @@ -138,7 +138,8 @@ class OutMessage { BATTLE_STATUS_CHANGE = 30, CLAUSE_LIST = 31, INVALID_TEAM = 32, - ERROR_MESSAGE = 33 + ERROR_MESSAGE = 33, + PRIVATE_MESSAGE = 34 }; // variable size message