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>2009-01-25 11:57:03 +0000
committerStijn Buys <ingar@osirion.org>2009-01-25 11:57:03 +0000
commitcc88902f93645b4284805f51cd7eba8b513ed5f3 (patch)
tree6dc0d22f16ed672a1b3e979f5a3814495f7c3a21 /src/core/netserver.cc
parent6844f88a70a7b746b74696e80a21d9b8f740afcb (diff)
bump network protocol version to 15,
fix player level initialization, exchange player list, credits, level, ping
Diffstat (limited to 'src/core/netserver.cc')
-rw-r--r--src/core/netserver.cc36
1 files changed, 33 insertions, 3 deletions
diff --git a/src/core/netserver.cc b/src/core/netserver.cc
index dd67809..6838e34 100644
--- a/src/core/netserver.cc
+++ b/src/core/netserver.cc
@@ -358,6 +358,13 @@ void NetServer::client_frame(NetClient *client, unsigned long timestamp)
}
}
}
+
+ // send updates for other players
+ for (GameInterface::Players::iterator it = server()->players().begin(); it != server()->players().end(); it++) {
+ if (((*it)->id() != client->player()->id()) && ((*it)->dirty())) {
+ send_player_update(client, (*it));
+ }
+ }
}
// run a network server frame, send updates to clients
@@ -380,13 +387,18 @@ void NetServer::frame(unsigned long timestamp)
// update player info always gets through
if (client->player()->dirty() || client->player()->zonechange()) {
-
send_player_update(client);
-
+ }
+ client->transmit();
+ }
+
+ // clear dirty state
+ for (Clients::iterator it = clients.begin(); it != clients.end(); it++) {
+ NetClient *client = *it;
+ if (client->player()->dirty() || client->player()->zonechange()) {
client->player()->set_dirty(false);
client->player()->set_zonechange(false);
}
- client->transmit();
}
}
@@ -508,6 +520,24 @@ void NetServer::send_player_update(NetClient *client)
client->send_raw(msg.str());
}
+// send a "pif" update player information to a single player
+void NetServer::send_player_update(NetClient *client, Player *player)
+{
+ std::ostringstream msg;
+ msg << "pif " << player->id() << " ";
+ client->player()->serialize_server_update(msg);
+ msg << '\n';
+ client->send_raw(msg.str());
+}
+
+// send a "pid" player disconnect information
+void NetServer::send_player_disconnect_info(NetClient *client, Player *player)
+{
+ std::ostringstream msg;
+ msg << "pid " << player->id() << '\n';
+ client->send_raw(msg.str());
+}
+
// parse incoming client messages
/**