|
@@ -838,7 +838,6 @@ static int
|
|
|
enet_protocol_handle_acknowledge (ENetHost * host, ENetEvent * event, ENetPeer * peer, const ENetProtocol * command)
|
|
|
{
|
|
|
enet_uint32 roundTripTime,
|
|
|
- roundTripTimeVariance,
|
|
|
receivedSentTime,
|
|
|
receivedReliableSequenceNumber;
|
|
|
ENetProtocolCommand commandNumber;
|
|
@@ -859,44 +858,42 @@ enet_protocol_handle_acknowledge (ENetHost * host, ENetEvent * event, ENetPeer *
|
|
|
|
|
|
if (peer -> lastReceiveTime > 0)
|
|
|
{
|
|
|
- enet_uint32 accumRoundTripTime = (peer -> roundTripTime << 8) + peer -> roundTripTimeRemainder;
|
|
|
- enet_uint32 accumRoundTripTimeVariance = (peer -> roundTripTimeVariance << 8) + peer -> roundTripTimeVarianceRemainder;
|
|
|
-
|
|
|
enet_peer_throttle (peer, roundTripTime);
|
|
|
|
|
|
- roundTripTime <<= 8;
|
|
|
- accumRoundTripTimeVariance = (accumRoundTripTimeVariance * 3 + ENET_DIFFERENCE (roundTripTime, accumRoundTripTime)) / 4;
|
|
|
- accumRoundTripTime = (accumRoundTripTime * 7 + roundTripTime) / 8;
|
|
|
-
|
|
|
- peer -> roundTripTime = accumRoundTripTime >> 8;
|
|
|
- peer -> roundTripTimeRemainder = accumRoundTripTime & 0xFF;
|
|
|
- peer -> roundTripTimeVariance = accumRoundTripTimeVariance >> 8;
|
|
|
- peer -> roundTripTimeVarianceRemainder = accumRoundTripTimeVariance & 0xFF;
|
|
|
+ peer -> roundTripTimeVariance -= peer -> roundTripTimeVariance / 4;
|
|
|
|
|
|
- roundTripTime = (accumRoundTripTime + 128) >> 8;
|
|
|
- roundTripTimeVariance = (accumRoundTripTimeVariance + 255) >> 8;
|
|
|
+ if (roundTripTime >= peer -> roundTripTime)
|
|
|
+ {
|
|
|
+ enet_uint32 diff = roundTripTime - peer -> roundTripTime;
|
|
|
+ peer -> roundTripTimeVariance += diff / 4;
|
|
|
+ peer -> roundTripTime += diff / 8;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ enet_uint32 diff = peer -> roundTripTime - roundTripTime;
|
|
|
+ peer -> roundTripTimeVariance += diff / 4;
|
|
|
+ peer -> roundTripTime -= diff / 8;
|
|
|
+ }
|
|
|
}
|
|
|
else
|
|
|
{
|
|
|
- roundTripTimeVariance = (roundTripTime + 1) / 2;
|
|
|
-
|
|
|
peer -> roundTripTime = roundTripTime;
|
|
|
- peer -> roundTripTimeVariance = roundTripTimeVariance;
|
|
|
+ peer -> roundTripTimeVariance = (roundTripTime + 1) / 2;
|
|
|
}
|
|
|
|
|
|
- if (roundTripTime < peer -> lowestRoundTripTime)
|
|
|
- peer -> lowestRoundTripTime = roundTripTime;
|
|
|
+ if (peer -> roundTripTime < peer -> lowestRoundTripTime)
|
|
|
+ peer -> lowestRoundTripTime = peer -> roundTripTime;
|
|
|
|
|
|
- if (roundTripTimeVariance > peer -> highestRoundTripTimeVariance)
|
|
|
- peer -> highestRoundTripTimeVariance = roundTripTimeVariance;
|
|
|
+ if (peer -> roundTripTimeVariance > peer -> highestRoundTripTimeVariance)
|
|
|
+ peer -> highestRoundTripTimeVariance = peer -> roundTripTimeVariance;
|
|
|
|
|
|
if (peer -> packetThrottleEpoch == 0 ||
|
|
|
ENET_TIME_DIFFERENCE (host -> serviceTime, peer -> packetThrottleEpoch) >= peer -> packetThrottleInterval)
|
|
|
{
|
|
|
peer -> lastRoundTripTime = peer -> lowestRoundTripTime;
|
|
|
- peer -> lastRoundTripTimeVariance = ENET_MAX (peer -> highestRoundTripTimeVariance, (peer -> lowestRoundTripTime + 15) / 16);
|
|
|
- peer -> lowestRoundTripTime = roundTripTime;
|
|
|
- peer -> highestRoundTripTimeVariance = ENET_MAX (roundTripTimeVariance, 3);
|
|
|
+ peer -> lastRoundTripTimeVariance = ENET_MAX (peer -> highestRoundTripTimeVariance, 1);
|
|
|
+ peer -> lowestRoundTripTime = peer -> roundTripTime;
|
|
|
+ peer -> highestRoundTripTimeVariance = peer -> roundTripTimeVariance;
|
|
|
peer -> packetThrottleEpoch = host -> serviceTime;
|
|
|
}
|
|
|
|