diff --git a/src/network/protocols/server_lobby.cpp b/src/network/protocols/server_lobby.cpp index de363695c..5f1e743b8 100644 --- a/src/network/protocols/server_lobby.cpp +++ b/src/network/protocols/server_lobby.cpp @@ -237,7 +237,6 @@ void ServerLobby::update(float dt) m_client_ready_count.getData() == m_game_setup->getPlayerCount()) { signalRaceStartToClients(); - m_server_delay = 0.1f; m_client_ready_count.getData() = 0; } m_client_ready_count.unlock(); @@ -249,9 +248,10 @@ void ServerLobby::update(float dt) // next state. break; case DELAY_SERVER: - m_server_delay -= dt; - if (m_server_delay < 0) + if (m_server_delay < StkTime::getRealTime()) { + Log::verbose("ServerLobby", "End delay at %lf", + StkTime::getRealTime()); m_state = RACING; World::getWorld()->setReadyToRace(); } @@ -350,7 +350,8 @@ void ServerLobby::registerServer() */ void ServerLobby::signalRaceStartToClients() { - Log::verbose("Server", "Signaling race start to clients"); + Log::verbose("Server", "Signaling race start to clients at %lf", + StkTime::getRealTime()); const std::vector &peers = STKHost::get()->getPeers(); NetworkString *ns = getNetworkString(1); ns->addUInt8(LE_START_RACE); @@ -935,12 +936,16 @@ void ServerLobby::finishedLoadingWorldClient(Event *event) void ServerLobby::startedRaceOnClient(Event *event) { m_client_ready_count.lock(); - Log::verbose("ServerLobby", "Host %d has started race.", - event->getPeer()->getHostId()); + Log::verbose("ServerLobby", "Host %d has started race at %lf.", + event->getPeer()->getHostId(), StkTime::getRealTime()); m_client_ready_count.getData()++; if (m_client_ready_count.getData() == m_game_setup->getPlayerCount()) { m_state = DELAY_SERVER; + m_server_delay = StkTime::getRealTime() + 0.1f; + Log::verbose("ServerLobby", "Started delay at %lf set delay to %lf", + StkTime::getRealTime(), + m_server_delay); terminateLatencyProtocol(); } m_client_ready_count.unlock(); diff --git a/src/network/protocols/server_lobby.hpp b/src/network/protocols/server_lobby.hpp index 0121cc1dd..68dfea20d 100644 --- a/src/network/protocols/server_lobby.hpp +++ b/src/network/protocols/server_lobby.hpp @@ -43,8 +43,9 @@ private: /** Keeps track of an artificial server delay (which makes sure that the * data from all clients has arrived when the server computes a certain - * timestep. */ - float m_server_delay; + * timestep.(. It stores the real time since epoch + delta (atm 0.1 + * seconds), which is the real time at which the server should start. */ + double m_server_delay; Protocol *m_current_protocol; bool m_selection_enabled;