public override MyDownloadWorldResult DownloadWorld() { MyTrace.Send(TraceWindow.Multiplayer, "World request sent"); MyDownloadWorldResult ret = new MyDownloadWorldResult(MyMultiplayer.WorldDownloadChannel, Lobby.GetOwner(), this); MyControlWorldRequestMsg msg = new MyControlWorldRequestMsg(); SendControlMessage(ServerId, ref msg); return(ret); }
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(); }
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(); }
public override MyDownloadWorldResult DownloadWorld() { MyTrace.Send(TraceWindow.Multiplayer, "World request sent"); MyDownloadWorldResult ret = new MyDownloadWorldResult(MyMultiplayer.WorldDownloadChannel, Lobby.GetOwner(), this); MyControlWorldRequestMsg msg = new MyControlWorldRequestMsg(); SendControlMessage(ServerId, ref msg); return ret; }