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); } }
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(); }
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(); }