From cc88902f93645b4284805f51cd7eba8b513ed5f3 Mon Sep 17 00:00:00 2001 From: Stijn Buys Date: Sun, 25 Jan 2009 11:57:03 +0000 Subject: bump network protocol version to 15, fix player level initialization, exchange player list, credits, level, ping --- src/core/netserver.cc | 36 +++++++++++++++++++++++++++++++++--- 1 file changed, 33 insertions(+), 3 deletions(-) (limited to 'src/core/netserver.cc') 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 /** -- cgit v1.2.3