Example #1
0
        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();
        }
Example #2
0
        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;
                }
            }
        }