improving synchronization protocol

git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/branches/hilnius@13253 178a84e3-b1eb-0310-8ba1-8eac791a3b58
This commit is contained in:
hilnius 2013-07-15 16:10:50 +00:00
parent dec7a74c99
commit 9bf6dde4f3
2 changed files with 11 additions and 9 deletions

View File

@ -134,8 +134,6 @@ void ProtocolManager::sendMessageExcept(Protocol* sender, STKPeer* peer, const N
uint32_t ProtocolManager::requestStart(Protocol* protocol) uint32_t ProtocolManager::requestStart(Protocol* protocol)
{ {
if (!protocol)
return;
// create the request // create the request
ProtocolRequest req; ProtocolRequest req;
ProtocolInfo info; ProtocolInfo info;

View File

@ -66,11 +66,14 @@ void SynchronizationProtocol::notifyEvent(Event* event)
response.ai8(event->data.gui8(talk_id)).ai32(token).ai8(0).ai32(sequence); response.ai8(event->data.gui8(talk_id)).ai32(token).ai8(0).ai32(sequence);
m_listener->sendMessage(this, peers[talk_id], response, false); m_listener->sendMessage(this, peers[talk_id], response, false);
Log::verbose("SynchronizationProtocol", "Answering sequence %u", sequence); Log::verbose("SynchronizationProtocol", "Answering sequence %u", sequence);
if (event->data.size() == 12 && !m_listener->isServer()) // countdown time in the message if (event->data.size() == 14 && !m_listener->isServer()) // countdown time in the message
{ {
short time_to_start = event->data.gui16(10); int time_to_start = event->data.gui32(10);
Log::info("SynchronizationProtocol", "Request to start game in %d.", time_to_start); Log::info("SynchronizationProtocol", "Request to start game in %d.", time_to_start);
startCountdown(time_to_start); if (!m_countdown_activated)
startCountdown(time_to_start);
else
m_countdown = (double)(time_to_start/1000.0);
} }
else else
Log::verbose("SynchronizationProtocol", "No countdown for now."); Log::verbose("SynchronizationProtocol", "No countdown for now.");
@ -89,7 +92,7 @@ void SynchronizationProtocol::notifyEvent(Event* event)
m_successed_pings[peer_id]++; m_successed_pings[peer_id]++;
m_average_ping[peer_id] = (int)((m_total_diff[peer_id]/m_successed_pings[peer_id])*1000.0); m_average_ping[peer_id] = (int)((m_total_diff[peer_id]/m_successed_pings[peer_id])*1000.0);
Log::verbose("SynchronizationProtocol", "Ping is %u", m_average_ping[peer_id]); Log::info("SynchronizationProtocol", "Ping is %u", m_average_ping[peer_id]);
} }
} }
@ -121,10 +124,11 @@ void SynchronizationProtocol::asynchronousUpdate()
NetworkString ns; NetworkString ns;
ns.ai8(i).addUInt32(peers[i]->getClientServerToken()).addUInt8(1).addUInt32(m_pings[i].size()); ns.ai8(i).addUInt32(peers[i]->getClientServerToken()).addUInt8(1).addUInt32(m_pings[i].size());
// now add the countdown if necessary // now add the countdown if necessary
if (m_countdown_activated) if (m_countdown_activated && m_listener->isServer())
{ {
ns.ai16((int)(m_countdown*1000.0)); ns.ai32((int)(m_countdown*1000.0));
Log::info("SynchronizationProtocol", "CNTActivated: Countdown value : %f", m_countdown); Log::info("SynchronizationProtocol", "CNTActivated: Countdown value : %f", m_countdown);
Log::info("SynchronizationProtocol", "Sent integer %d", (int)(ns.getUInt32(10)));
} }
Log::verbose("SynchronizationProtocol", "Added sequence number %u for peer %d", m_pings[i].size(), i); Log::verbose("SynchronizationProtocol", "Added sequence number %u for peer %d", m_pings[i].size(), i);
timer = current_time; timer = current_time;
@ -143,5 +147,5 @@ void SynchronizationProtocol::startCountdown(int ms_countdown)
m_countdown_activated = true; m_countdown_activated = true;
m_countdown = (double)(ms_countdown)/1000.0; m_countdown = (double)(ms_countdown)/1000.0;
m_last_countdown_update = Time::getRealTime(); m_last_countdown_update = Time::getRealTime();
Log::info("SynchronizationProtocol", "Countdown started."); Log::info("SynchronizationProtocol", "Countdown started with value %f", m_countdown);
} }