Esempio n. 1
0
 public MyDownloadProfilerResult(int channel, ulong sender, MyMultiplayerBase mp)
 {
     m_mp         = mp;
     m_sender     = sender;
     m_channel    = channel;
     m_receiveMsg = new MyMultipartMessage(channel);
     MyNetworkReader.SetHandler(m_channel, MyDownloadProfilerResult_Received, mp.DisconnectClient);
 }
Esempio n. 2
0
 public MyDownloadWorldResult(int channel, ulong sender, MyMultiplayerBase mp)
 {
     m_mp         = mp;
     m_sender     = sender;
     m_channel    = channel;
     m_receiveMsg = new MyMultipartMessage(channel);
     MyNetworkReader.SetHandler(m_channel, MyDownloadWorldResult_Received, mp.DisconnectClient);
     SteamSDK.Peer2Peer.ConnectionFailed += Peer2Peer_ConnectionFailed;
 }
        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");

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