diff options
author | Stijn Buys <ingar@osirion.org> | 2011-07-09 14:11:44 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2011-07-09 14:11:44 +0000 |
commit | e942db1c8d87b7db286545d72c604e879f7aeab0 (patch) | |
tree | 4b07ef3422ee265156e020707c3bc96ecd9ed1e0 /src/core/gameserver.cc | |
parent | f39aec30f0e5c6f466681ed34bffd41150976ab9 (diff) |
Cleanup of the messaging interface.
Diffstat (limited to 'src/core/gameserver.cc')
-rw-r--r-- | src/core/gameserver.cc | 60 |
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()) |