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>2008-03-21 19:25:11 +0000
committerStijn Buys <ingar@osirion.org>2008-03-21 19:25:11 +0000
commit2314c27dd650dc02c0b5bdd3bef75818393a9ab5 (patch)
tree231815c866a1330338d976480284250e99207554 /src/core/gameserver.cc
parent7e99fac4552b402034e5fc3e833cbe8c274f95ce (diff)
switched to UDP networking
Diffstat (limited to 'src/core/gameserver.cc')
-rw-r--r--src/core/gameserver.cc29
1 files changed, 17 insertions, 12 deletions
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<unsigned int, Entity *>::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<NetClient *>::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<NetClient *>::iterator it = server_network->clients.begin(); it != server_network->clients.end(); it++) {
- (*it)->transmit();
- }
-
+ server_network->transmit();
+
} else {
// local update stub