From 2314c27dd650dc02c0b5bdd3bef75818393a9ab5 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Fri, 21 Mar 2008 19:25:11 +0000 Subject: switched to UDP networking --- src/core/gameserver.cc | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) (limited to 'src/core/gameserver.cc') diff --git a/src/core/gameserver.cc b/src/core/gameserver.cc index 985fac4..add0ca9 100644 --- a/src/core/gameserver.cc +++ b/src/core/gameserver.cc @@ -58,8 +58,9 @@ GameServer::GameServer() : GameInterface() Func::add("say", (GameFuncPtr) func_say); - if (!Cvar::sv_dedicated->value()) + if (!Cvar::sv_dedicated->value()) { player_connect(localplayer()); + } server_running = true; } @@ -113,7 +114,7 @@ void GameServer::say(Player *player, std::string const &message) } } -void GameServer::broadcast(std::string const & message, int ignoreplayer) +void GameServer::broadcast(std::string const & message, Player *ignore_player) { // send to console con_print << message << "\n"; @@ -123,7 +124,7 @@ void GameServer::broadcast(std::string const & message, int ignoreplayer) std::string netmessage("msg info "); netmessage.append(message); netmessage += '\n'; - server_network->broadcast(netmessage, ignoreplayer); + server_network->broadcast(netmessage, ignore_player); } } @@ -179,7 +180,7 @@ void GameServer::player_connect(Player *player) { std::string message(player->name()); message.append(" connects."); - broadcast(message, player->id()); + broadcast(message, player); // notify the game module server_module->player_connect(player); @@ -189,7 +190,7 @@ void GameServer::player_disconnect(Player *player) { std::string message(player->name()); message.append(" disconnects."); - broadcast(message, player->id()); + broadcast(message, player); // notify the game module server_module->player_disconnect(player); @@ -201,8 +202,9 @@ void GameServer::frame(float seconds) return; // process incoming network messages - if (server_network != 0 ) { - server_network->frame(seconds); + if (server_network) { + server_network->receive(); + if (server_network->error()) { abort(); return; @@ -230,6 +232,10 @@ void GameServer::frame(float seconds) // send updates if (server_network) { + // transmit buffered sends + server_network->transmit(); + + // TODO - start server frame std::map::iterator it; for (it=Entity::registry.begin(); it != Entity::registry.end(); it++) { Entity *entity = (*it).second; @@ -261,7 +267,7 @@ void GameServer::frame(float seconds) // update player info for (std::list::iterator it = server_network->clients.begin(); it != server_network->clients.end(); it++) { NetClient *client = *it; - if (client->player()->dirty()) { + if (client->player()->dirty() && (client->state() == NetClient::Connected)) { // send player data std::ostringstream netmsg; netmsg.str(""); @@ -272,12 +278,11 @@ void GameServer::frame(float seconds) client->player()->player_dirty = false; } } + // TODO - end server frame // transmit buffered sends - for (std::list::iterator it = server_network->clients.begin(); it != server_network->clients.end(); it++) { - (*it)->transmit(); - } - + server_network->transmit(); + } else { // local update stub -- cgit v1.2.3