void MyDownloadWorldResult_Received(byte[] data, int dataSize, ulong sender, TimeSpan timestamp) { ProfilerShort.Begin("DownloadWorldChunk"); Debug.Assert(State == MyDownloadWorldStateEnum.Established || State == MyDownloadWorldStateEnum.InProgress, "This should not be called, find why it's called"); if (m_sender == sender) { var status = m_receiveMsg.Compose(data, dataSize); switch (status) { case MyMultipartMessage.Status.InProgress: break; case MyMultipartMessage.Status.Finished: Deregister(); m_receiveMsg.Stream.Position = 0; if (m_receiveMsg.Stream.Length > 0) { MyObjectBuilder_World worldData; if (Sandbox.Common.ObjectBuilders.Serializer.MyObjectBuilderSerializer.DeserializeGZippedXML(m_receiveMsg.Stream, out worldData)) { WorldData = worldData; State = MyDownloadWorldStateEnum.Success; MySandboxGame.Log.WriteLineAndConsole(String.Format("World download progress status: {0}, {1}", State.ToString(), this.Progress)); } else { MySandboxGame.Log.WriteLine("Deserialization failed during world download."); State = MyDownloadWorldStateEnum.DeserializationFailed; } } else { State = MyDownloadWorldStateEnum.WorldNotAvailable; } break; case MyMultipartMessage.Status.Error: Deregister(); MySandboxGame.Log.WriteLine("Invalid packet header."); State = MyDownloadWorldStateEnum.InvalidMessage; break; } m_mp.SendAck(sender); MyTrace.Send(TraceWindow.Multiplayer, String.Format("World download progress status: {0}, {1}", State.ToString(), this.Progress)); RaiseProgressChanged(); } ProfilerShort.End(); }
void MyDownloadProfilerResult_Received(byte[] data, int dataSize, ulong sender, MyTimeSpan timestamp, MyTimeSpan receivedTime) { if (m_finished) { m_mp.SendAck(sender, m_channel, m_receiveMsg.BlockCount - 1, m_receiveMsg.BlockCount); return; } if (m_sender == sender) { var status = m_receiveMsg.Compose(data, dataSize, sender); switch (status) { case MyMultipartMessage.Status.InProgress: break; case MyMultipartMessage.Status.Finished: MyNetworkReader.ClearHandler(m_channel); m_receiveMsg.Stream.Position = 0; if (m_receiveMsg.Stream.Length > 0) { MyObjectBuilder_Profiler profilerBuilder; MyObjectBuilderSerializer.DeserializeGZippedXML(m_receiveMsg.Stream, out profilerBuilder); VRage.Profiler.MyRenderProfiler.SelectedProfiler = MyObjectBuilder_Profiler.Init(profilerBuilder); VRage.Profiler.MyRenderProfiler.IsProfilerFromServer = true; } m_finished = true; break; case MyMultipartMessage.Status.Error: MyNetworkReader.ClearHandler(m_channel); break; } } }