Project::OSiRiON - Git repositories
Project::OSiRiON
News . About . Screenshots . Downloads . Forum . Wiki . Tracker . Git
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorStijn Buys <ingar@osirion.org>2011-07-09 14:11:44 +0000
committerStijn Buys <ingar@osirion.org>2011-07-09 14:11:44 +0000
commite942db1c8d87b7db286545d72c604e879f7aeab0 (patch)
tree4b07ef3422ee265156e020707c3bc96ecd9ed1e0 /src/core/netserver.cc
parentf39aec30f0e5c6f466681ed34bffd41150976ab9 (diff)
Cleanup of the messaging interface.
Diffstat (limited to 'src/core/netserver.cc')
-rw-r--r--src/core/netserver.cc49
1 files changed, 41 insertions, 8 deletions
diff --git a/src/core/netserver.cc b/src/core/netserver.cc
index 37adfc1..12210a5 100644
--- a/src/core/netserver.cc
+++ b/src/core/netserver.cc
@@ -476,14 +476,46 @@ void NetServer::frame(unsigned long timestamp)
* zone <id> <zone create/update data>
*/
-// send a "msg <channel>" message to one client
-void NetServer::send_message(NetClient *client, const char *channel, std::string const & message)
+// send a message on a specified channel to a single client
+void NetServer::send_message(NetClient *client, const Message::Channel channel, const std::string & message)
{
- if (!channel)
+ if (!message.size())
return;
+ std::string msg_channel;
+ switch (channel) {
+ case core::Message::Info: // Info message
+ msg_channel.assign("info");
+ break;
+
+ case core::Message::Local: // Chat message in the local zone
+ msg_channel.assign("local");
+ break;
+
+ case core::Message::Public: // Public chat message
+ msg_channel.assign("public");
+ break;
+
+ case core::Message::Private: // Private chat message
+ msg_channel.assign("private");
+ break;
+
+ case core::Message::RCon: // RCon message
+ msg_channel.assign("rcon");
+ break;
+
+ case core::Message::Sound: // Sound event
+ msg_channel.assign("snd");
+ break;
+
+ default:
+ con_warn << "message on unknown channel " << channel << "!" << std::endl;
+ return;
+ break;
+ }
+
std::string msg("msg ");
- msg.append(channel);
+ msg.append(msg_channel);
msg += ' ';
msg.append(message);
msg += '\n';
@@ -491,6 +523,7 @@ void NetServer::send_message(NetClient *client, const char *channel, std::string
client->send_raw(msg);
}
+
// disconnect a client
void NetServer::send_disconnect(NetClient *client)
{
@@ -700,7 +733,7 @@ void NetServer::parse_incoming_message(NetClient *client, const std::string & me
netmsgstream << "client " << protover << " server " << PROTOCOLVERSION << "!\n";
con_print << client->host() << ":" << client->port() << " " << netmsgstream.str() << std::endl;
- send_message(client, "info", netmsgstream.str());
+ send_message(client, Message::Info, netmsgstream.str());
send_disconnect(client);
} else {
@@ -710,7 +743,7 @@ void NetServer::parse_incoming_message(NetClient *client, const std::string & me
std::string message("Unknown client protocol version!");
con_print << client->host() << ":" << client->port() << " " << message << std::endl;
- send_message(client, "info", message);
+ send_message(client, Message::Info, message);
send_disconnect(client);
}
@@ -865,7 +898,7 @@ void NetServer::parse_incoming_message(NetClient *client, const std::string & me
core::CommandBuffer::exec();
while (console()->rconbuf().size()) {
- send_message(client, "rcon", (*console()->rconbuf().begin()));
+ send_message(client, Message::RCon, (*console()->rconbuf().begin()));
core::console()->rconbuf().pop_front();
}
@@ -873,7 +906,7 @@ void NetServer::parse_incoming_message(NetClient *client, const std::string & me
console()->set_rcon(false);
} else {
- send_message(client, "info", "rcon access denied");
+ send_message(client, Message::Info, "rcon access denied");
con_warn << "^B" << client->player()->name() << "^W rcon access denied" << std::endl;
}
}