Esempio n. 1
0
        private void ReceivedPong(NetMessage pong, double localTimeRecv)
        {
            m_lastPongReceived = localTimeRecv;

            double localTimeSent  = pong.m_data.ReadDouble();
            double remoteTimeRecv = pong.m_data.ReadDouble();
            double remoteTimeSent = pong.m_data.ReadDouble();

            if (localTimeSent > localTimeRecv)
            {
                m_owner.LogVerbose(NetTime.Now + ": Received pong; but with a bad timestamp, so we're dropping it.");
                return;
            }

            var entry = new PongEntry(localTimeSent, remoteTimeRecv, remoteTimeSent, localTimeRecv);

            AddPongEntry(entry);

            m_owner.LogVerbose(NetTime.Now + ": Got pong (" + entry + ")");

            if ((m_owner.m_enabledMessageTypes & NetMessageType.PongReceived) == NetMessageType.PongReceived)
            {
                // NOTE: the NetMessageType.PongReceived app notification/message no longer has an NetBuffer
                // and thus no longer a serialized int32 that can be read. Keep that in mind if you get
                // null exception when handling NetMessageType.PongReceived in your main loop.
                m_owner.NotifyApplication(NetMessageType.PongReceived, this);
            }
        }
Esempio n. 2
0
        private void AddPongEntry(PongEntry newEntry)
        {
            var oldEntry = m_pongHistory[pongHistoryCount - 1];

            for (int i = pongHistoryCount - 1; i > 0; i--)
            {
                m_pongHistory[i] = m_pongHistory[i - 1];
            }

            m_pongHistory[0] = newEntry;

            int oldIndex = Array.BinarySearch(m_pongHistorySorted, oldEntry);

            if (oldIndex >= 0)
            {
                NetUtility.ReplaceSortedItem(m_pongHistorySorted, oldIndex, newEntry);
            }
            else
            {
                string pongHistoryValues = "";
                foreach (var pong in m_pongHistorySorted)
                {
                    pongHistoryValues += "\n (" + pong + ")";
                }

                Log.Error(LogFlags.Socket, "Can't find pong entry (", oldEntry, ") in sorted history: ", pongHistoryValues);
            }

            UpdateValuesBasedOnPongHistory();
        }
Esempio n. 3
0
        private void SetInitialPongEntry(PongEntry entry)
        {
            for (int i = 0; i < pongHistoryCount; i++)
            {
                m_pongHistory[i] = entry;
            }

            for (int i = 0; i < pongHistoryCount; i++)
            {
                m_pongHistorySorted[i] = entry;
            }

            m_owner.LogWrite("Initializing pong history (" + entry + ")", this);

            UpdateValuesBasedOnPongHistory();
        }