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/gameserver.cc
parentf39aec30f0e5c6f466681ed34bffd41150976ab9 (diff)
Cleanup of the messaging interface.
Diffstat (limited to 'src/core/gameserver.cc')
-rw-r--r--src/core/gameserver.cc60
1 files changed, 42 insertions, 18 deletions
diff --git a/src/core/gameserver.cc b/src/core/gameserver.cc
index b4b3322..a1102bd 100644
--- a/src/core/gameserver.cc
+++ b/src/core/gameserver.cc
@@ -281,7 +281,7 @@ Inventory *GameServer::request_inventory(Entity *entity)
}
-// global chat message
+// a player sends a global chat message
void GameServer::shout(Player *player, std::string const &message)
{
if (!message.size())
@@ -301,7 +301,7 @@ void GameServer::shout(Player *player, std::string const &message)
broadcast(Message::Public, notification);
}
-// local chat message
+// a player sends a local chat message
void GameServer::say(Player *player, std::string const &message)
{
if (!message.size())
@@ -324,7 +324,7 @@ void GameServer::say(Player *player, std::string const &message)
broadcast(player->zone(), notification);
}
-// player-to-player chat messages
+// a player send a prvate mesage to another player
void GameServer::private_message(Player *player, std::string const &args)
{
if (!args.size())
@@ -347,10 +347,9 @@ void GameServer::private_message(Player *player, std::string const &args)
return;
}
-
- std::string message(args.substr(target.size()));
- player->message(Message::Private, "^FTo ^B" + targetplayer->name() + "^F:" + message);
- targetplayer->message(Message::Private, "^FFrom ^B" + player->name() + "^F:" + message);
+ std::string text(args.substr(target.size()));
+ message(player, Message::Private, "^FTo ^B" + targetplayer->name() + "^F:" + text);
+ message(targetplayer, Message::Private, "^FFrom ^B" + player->name() + "^F:" + text);
}
// FIXME kicked by
@@ -361,24 +360,35 @@ void GameServer::kick(Player *player, std::string const &reason)
return;
}
- NetClient *client = server_network->find_client(player);
+ NetClient *client = player->client();
if (client) {
broadcast("^B" + player->name() + "^B has been kicked: " + reason, player);
- player->send("^WYou have been kicked: " + reason);
+ server_network->send_message(client, Message::Info, "^WYou have been kicked: " + reason);
server_network->send_disconnect(client);
} else {
con_print << "Network client not found" << std::endl;
}
}
-// broadcast an "info" message to all players
-void GameServer::broadcast(const std::string text, Player *ignore_player)
+// server sends a message on a specified channel to a single player
+void GameServer::message(Player *player, const Message::Channel channel, const std::string text)
{
- broadcast(Message::Info, text, ignore_player);
-}
+ if (!text.size())
+ return;
+
+ NetClient *client = player->client();
+ if (client) {
+ // this player is a network client, send message over network
+ server_network->send_message(client, channel, text);
+
+ } else if (player == localplayer()) {
+ // local player, send message to the local application
+ application()->notify_message(channel, text);
+ }
+}
-// broadcast a message on a specified channel to all players
+// server broadcasts a message on a specified channel to all players
void GameServer::broadcast(const Message::Channel channel, const std::string text, Player *ignore_player)
{
if (!text.size())
@@ -386,9 +396,16 @@ void GameServer::broadcast(const Message::Channel channel, const std::string tex
for (Players::iterator it = players().begin(); it != players().end(); it++) {
Player *player = (*it);
+ NetClient *client = player->client();
if (player != ignore_player) {
- Player *player = (*it);
- player->message(channel, text);
+ if (client) {
+ // this player is a network client, send message over network
+ server_network->send_message(client, channel, text);
+
+ } else if (player == localplayer()) {
+ // local player, send message to the local application
+ application()->notify_message(channel, text);
+ }
}
}
@@ -398,7 +415,14 @@ void GameServer::broadcast(const Message::Channel channel, const std::string tex
}
}
-// broadcast a message to all players in a particular zone
+// server broadcasts an "info" message to all players
+void GameServer::broadcast(const std::string text, Player *ignore_player)
+{
+ broadcast(Message::Info, text, ignore_player);
+}
+
+
+// server broadcasts a message to all players in a particular zone
void GameServer::broadcast(Zone *zone, std::string const text, Player *ignore_player)
{
if (!text.size())
@@ -421,7 +445,7 @@ void GameServer::broadcast(Zone *zone, std::string const text, Player *ignore_pl
}
}
-// broadcast a sound event to all players
+// server broadcasts a sound event to all players
void GameServer::broadcast_sound(const std::string name, Player *ignore_player)
{
if (!name.size())