diff options
author | Stijn Buys <ingar@osirion.org> | 2009-01-25 11:57:03 +0000 |
---|---|---|
committer | Stijn Buys <ingar@osirion.org> | 2009-01-25 11:57:03 +0000 |
commit | cc88902f93645b4284805f51cd7eba8b513ed5f3 (patch) | |
tree | 6dc0d22f16ed672a1b3e979f5a3814495f7c3a21 /src/core/netserver.cc | |
parent | 6844f88a70a7b746b74696e80a21d9b8f740afcb (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.cc | 36 |
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 /** |