Skip to content

Commit

Permalink
Implemented important message
Browse files Browse the repository at this point in the history
--HG--
extra : rebase_source : f2ab2cb7df6d22f6e754ecf932f30ddf14822e04
  • Loading branch information
Carlos Fernandez committed Oct 23, 2010
1 parent e8b3c8a commit e840b3c
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 3 deletions.
52 changes: 50 additions & 2 deletions src/network/network.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,8 @@ class InMessage {
CLIENT_ACTIVITY = 18,
CANCEL_QUEUE = 19,
CANCEL_BATTLE_ACTION = 20,
PRIVATE_MESSAGE = 21
PRIVATE_MESSAGE = 21,
IMPORTANT_MESSAGE = 22
};

InMessage() {
Expand Down Expand Up @@ -583,6 +584,17 @@ class PrivateMessage : public OutMessage {
}
};

class ImportantMessage : public OutMessage {
public:
ImportantMessage(const int channel, const string &sender,
const string &message): OutMessage(IMPORTANT_MESSAGE) {
*this << channel;
*this << sender;
*this << message;
finalise();
}
};

class MetagameQueue {
public:
typedef pair<ClientImplPtr, Pokemon::ARRAY> QUEUE_ENTRY;
Expand Down Expand Up @@ -1499,6 +1511,41 @@ class ClientImpl : public Client, public enable_shared_from_this<ClientImpl> {
client->sendMessage(PrivateMessage(m_name, m_name, content));
}

/**
* int32 : channel (-1 for global)
* string : the message to display
*/
void handleImportantMessage(InMessage &msg) {
int channelId;
string message;
msg >> channelId >> message;

ChannelPtr channel = (channelId == -1) ?
m_server->getMainChannel() : getChannel(channelId);
if (!channel) {
return;
}

Channel::Type::TYPE type = channel->getChannelType();
Channel::FLAGS auth = channel->getStatusFlags(shared_from_this());
if ((type == Channel::Type::BATTLE) && !auth[Channel::PROTECTED]) {
return;
}
if (!auth[Channel::OP]) {
return;
}

m_server->broadcast(ImportantMessage(channelId, m_name, message));

string logMessage;
if (channelId == -1) {
logMessage = "[important-global] " + m_name + ": " + message;
} else {
logMessage = "[important] " + m_name + ": " + message;
}
channel->writeLog(logMessage);
}

string m_name;
int m_id; // user id
bool m_authenticated;
Expand Down Expand Up @@ -1550,7 +1597,8 @@ const ClientImpl::MESSAGE_HANDLER ClientImpl::m_handlers[] = {
&ClientImpl::handleActivityMessage,
&ClientImpl::handleCancelQueue,
&ClientImpl::handleCancelBattleAction,
&ClientImpl::handlePrivateMessage
&ClientImpl::handlePrivateMessage,
&ClientImpl::handleImportantMessage
};

const int ClientImpl::MESSAGE_COUNT =
Expand Down
3 changes: 2 additions & 1 deletion src/network/network.h
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,8 @@ class OutMessage {
CLAUSE_LIST = 31,
INVALID_TEAM = 32,
ERROR_MESSAGE = 33,
PRIVATE_MESSAGE = 34
PRIVATE_MESSAGE = 34,
IMPORTANT_MESSAGE = 35
};

// variable size message
Expand Down

0 comments on commit e840b3c

Please sign in to comment.