Esempio n. 1
0
        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);
                }
            }
        }