private void OnClockSync(MessageMetaData metadata, BasicMessage.Pong pong) { bool isPongReceived = false; for (int i = _outstandingPings.Count - 1; i >= 0; i--) { var outstandingPing = _outstandingPings[i]; // Handle the ping frame, set the clocks remove any old outstanding pings if (outstandingPing.FrameId == pong.FrameId) { _roundTripTime = (float)(_localRealtimeClock.CurrentTime - outstandingPing.Timestamp); var latency = _roundTripTime / 2f; // TODO Add latency smoothing _latencyInfo.UpdateLatency(metadata.ConnectionId, latency); isPongReceived = true; } if (isPongReceived) { _outstandingPings.RemoveAt(i); } } }
private void OnServerClockSync(BasicMessage.Pong pong) { _roundtripTime = _synchedGameClock.CurrentTime - pong.SenderTimestamp; }