/// <summary> /// Processes state sync sent by server. /// </summary> public void ProcessStateSync(MyPacket packet) { // Simulated packet loss // if (MyRandom.Instance.NextFloat() > 0.05f) return; m_receiveStream.ResetRead(packet); m_lastStateSyncPacketId = m_receiveStream.ReadByte(); while (m_receiveStream.BytePosition < m_receiveStream.ByteLength) { NetworkId networkID = m_receiveStream.ReadNetworkId(); IMyNetObject obj = GetObjectByNetworkId(networkID); var pos = m_receiveStream.BytePosition; NetProfiler.Begin(obj.GetType().Name); Debug.Assert(obj != null && obj is IMyStateGroup, "IMyStateGroup not found by NetworkId"); ((IMyStateGroup)obj).Serialize(m_receiveStream, null, m_lastStateSyncPacketId, 0); NetProfiler.End(m_receiveStream.ByteLength - pos); } if (!m_acks.Contains(m_lastStateSyncPacketId)) { m_acks.Add(m_lastStateSyncPacketId); } }
public static void DispatchBlockingEventPrefix(CallSite site, IMyNetObject targetReplicable) { if (!calls.ContainsKey(site.MethodInfo.Name)) { calls.Add(site.MethodInfo.Name, 0); } calls[site.MethodInfo.Name]++; targets[site.MethodInfo.Name] = targetReplicable?.GetType().Name ?? "x"; if (last2 > DateTimeOffset.Now.ToUnixTimeSeconds() - 5) { return; } last2 = DateTimeOffset.Now.ToUnixTimeSeconds(); foreach (var k in calls.Keys) { Plugin.Log.Info($"called method {k} {calls[k]} times"); } Plugin.Log.Info($"---------------"); foreach (var k in targets.Keys) { Plugin.Log.Info($"{k} {targets[k]}"); } Plugin.Log.Info($"----------------------------------------"); calls.Clear(); targets.Clear(); }