Esempio n. 1
0
        protected void OnProfilerRequest(ref MyControlProfilerMsg data, ulong sender)
        {
            if (IsServer && !m_profilerSenders.ContainsKey(sender))
            {
                MemoryStream profilerStream = new MemoryStream();

                MyObjectBuilder_Profiler profilerData = MyObjectBuilder_Profiler.GetObjectBuilder(VRage.Profiler.MyRenderProfiler.GetProfilerAtIndex(data.index));
                MyObjectBuilderSerializer.SerializeXML(profilerStream, profilerData, MyObjectBuilderSerializer.XmlCompression.Gzip);
                SyncLayer.TransportLayer.SendFlush(sender);
                var buffer = profilerStream.ToArray();
                MyMultipartSender msgSender = new MyMultipartSender(buffer, buffer.Length, sender, MyMultiplayer.ProfilerDownloadChannel);
                m_profilerSenders[sender] = msgSender;
            }
        }
Esempio n. 2
0
        protected void OnWorldRequest(ref MyControlWorldRequestMsg data, ulong sender)
        {
            ProfilerShort.Begin("OnWorldRequest");

            MyTrace.Send(TraceWindow.Multiplayer, "World request received");

            MySandboxGame.Log.WriteLineAndConsole("World request received: " + GetMemberName(sender));

            if (IsClientKickedOrBanned(sender) || MySandboxGame.ConfigDedicated.Banned.Contains(sender))
            {
                MySandboxGame.Log.WriteLineAndConsole("Sending no world, because client has been kicked or banned: " + GetMemberName(sender) + " (Client is probably modified.)");
                RaiseClientLeft(sender, ChatMemberStateChangeEnum.Banned);
                return;
            }

            m_worldSendStream = new MemoryStream();

            if (IsServer && MySession.Static != null)
            {
                MySandboxGame.Log.WriteLine("...responding");

                MyObjectBuilder_World worldData = MySession.Static.GetWorld(false);
                var checkpoint = worldData.Checkpoint;
                checkpoint.WorkshopId                = null;
                checkpoint.CharacterToolbar          = null;
                checkpoint.Settings.ScenarioEditMode = checkpoint.Settings.ScenarioEditMode && !MySession.Static.LoadedAsMission;

                worldData.Clusters = new List <VRageMath.BoundingBoxD>();
                Sandbox.Engine.Physics.MyPhysics.SerializeClusters(worldData.Clusters);

                ProfilerShort.Begin("SerializeXML");
                MyObjectBuilderSerializer.SerializeXML(m_worldSendStream, worldData, MyObjectBuilderSerializer.XmlCompression.Gzip);
                ProfilerShort.BeginNextBlock("SendFlush");
                SyncLayer.TransportLayer.SendFlush(sender);
                ProfilerShort.End();
            }
            var buffer = m_worldSendStream.ToArray();
            MyMultipartSender msgSender = new MyMultipartSender(buffer, buffer.Length, sender, MyMultiplayer.WorldDownloadChannel, 1150);

            m_worldSenders[sender] = msgSender;

            ProfilerShort.End();
        }
Esempio n. 3
0
        protected void OnWorldRequest(ref MyControlWorldRequestMsg data, ulong sender)
        {
            ProfilerShort.Begin("OnWorldRequest");

            MyTrace.Send(TraceWindow.Multiplayer, "World request received");

            MySandboxGame.Log.WriteLineAndConsole("World request received: " + GetMemberName(sender));

            if (IsClientKickedOrBanned(sender))
            {
                MySandboxGame.Log.WriteLineAndConsole("Sending no world, because client has been kicked or banned: " + GetMemberName(sender));
                return;
            }

            m_worldSendStream = new MemoryStream();

            if (IsServer && MySession.Static != null)
            {
                MySandboxGame.Log.WriteLine("...responding");

                MyMultipartMessage.SendPreemble(sender, MyMultiplayer.WorldDownloadChannel);

                MyObjectBuilder_World worldData = MySession.Static.GetWorld(false);
                var checkpoint = worldData.Checkpoint;
                checkpoint.WorkshopId                = null;
                checkpoint.CharacterToolbar          = null;
                checkpoint.Settings.ScenarioEditMode = checkpoint.Settings.ScenarioEditMode && !MySession.Static.LoadedAsMission;
                ProfilerShort.Begin("SerializeXML");
                MyObjectBuilderSerializer.SerializeXML(m_worldSendStream, worldData, MyObjectBuilderSerializer.XmlCompression.Gzip);
                ProfilerShort.BeginNextBlock("SendFlush");
                SyncLayer.TransportLayer.SendFlush(sender);
                ProfilerShort.End();
            }

            var buffer = m_worldSendStream.ToArray();
            MyMultipartSender msgSender = new MyMultipartSender(buffer, buffer.Length, sender, MyMultiplayer.WorldDownloadChannel, 1150 * 12);

            m_worldSenders[sender] = msgSender;

            ProfilerShort.End();
        }