internal MyMultiplayerBase(MySyncLayer syncLayer) { SyncLayer = syncLayer; m_controlSendStream = new ByteStream(64 * 1024, true); m_controlReceiveStream = new ByteStream(); m_kickedClients = new Dictionary <ulong, int>(); m_bannedClients = new HashSet <ulong>(); m_lastKickUpdate = MySandboxGame.TotalTimeInMilliseconds; MyNetworkReader.SetHandler(MyMultiplayer.ControlChannel, ControlMessageReceived, DisconnectClient); RegisterControlMessage <MyControlWorldRequestMsg>(MyControlMessageEnum.WorldRequest, OnWorldRequest, MyMessagePermissions.ToServer); RegisterControlMessage <MyControlAckMessageMsg>(MyControlMessageEnum.Ack, OnAck, MyMessagePermissions.ToServer); RegisterControlMessage <MyControlAckHeaderMessageMsg>(MyControlMessageEnum.HeaderAck, OnHeaderAck, MyMessagePermissions.ToServer); RegisterControlMessage <MyControlKickClientMsg>(MyControlMessageEnum.Kick, OnClientKick, MyMessagePermissions.FromServer | MyMessagePermissions.ToServer); RegisterControlMessage <MyControlDisconnectedMsg>(MyControlMessageEnum.Disconnected, OnDisconnectedClient, MyMessagePermissions.FromServer | MyMessagePermissions.ToServer); RegisterControlMessage <MyControlBanClientMsg>(MyControlMessageEnum.Ban, OnClientBan, MyMessagePermissions.FromServer | MyMessagePermissions.ToServer); RegisterControlMessage <MyControlProfilerMsg>(MyControlMessageEnum.ProfilerRequest, OnProfilerRequest, MyMessagePermissions.ToServer); //m_serializers[typeof(MyControlMessageData)] = new XmlSerializer(typeof(MyControlMessageData)); syncLayer.TransportLayer.DisconnectPeerOnError = DisconnectClient; // TODO: Remove //SyncLayer.TransportLayer.Register(MyMessageId.SERVER_UPDATE, OnServerPhysicsUpdate); }
public void UnloadDataComponents(bool beforeLoadWorld = false) { // Unload in reverse so dependencies can be relied on. for (int i = m_loadOrder.Count - 1; i >= 0; --i) { m_loadOrder[i].UnloadDataConditional(); } //foreach (var component in m_sessionComponents) //{ // component.UnloadDataConditional(); //} MySessionComponentMapping.Clear(); m_sessionComponents.Clear(); m_loadOrder.Clear(); foreach (var compList in m_sessionComponentsForUpdate.Values) { compList.Clear(); } if (!beforeLoadWorld) { Sync.Players.UnregisterEvents(); Sync.Clients.Clear(); MyNetworkReader.Clear(); } m_lasers.Clear(); Ready = false; }
protected override void UnloadData() { base.UnloadData(); if (m_recording) { StopRecording(); } MyNetworkReader.ClearHandler(MyMultiplayer.VoiceChatChannel); foreach (var pair in m_voices) { m_voices[pair.Key].StopSound(true, true); m_voices[pair.Key].Cleanup(); } m_compressedVoiceBuffer = null; m_uncompressedVoiceBuffer = null; m_voiceChatLogic = null; m_VoIP = null; Static = null; m_receivedVoiceData = null; m_voices = null; m_keys = null; Sync.Players.PlayerRemoved -= Players_PlayerRemoved; MyAudio.Static.VoiceChatEnabled -= Static_VoiceChatEnabled; MyHud.VoiceChat.VisibilityChanged -= VoiceChat_VisibilityChanged; }
public MyTransportLayer(int channel) { m_channel = channel; m_sendStream = new ByteStream(64 * 1024, true); m_receiveStream = new ByteStream(); m_loopback = MyNetworkReader.SetHandler(channel, HandleMessage, MyReceiveQueue.Mode.Timer, Timer); }
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); }
public void Clear() { MyNetworkReader.ClearHandler(MyMultiplayer.GameEventChannel); if (m_buffer != null) { m_buffer.Clear(); } }
public MyDownloadWorldResult(int channel, ulong sender, MyMultiplayerBase mp) { m_mp = mp; m_sender = sender; m_channel = channel; MyNetworkReader.SetHandler(m_channel, MyDownloadWorldResult_Received); SteamSDK.Peer2Peer.ConnectionFailed += Peer2Peer_ConnectionFailed; }
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; }
public virtual void Dispose() { MyTrace.Send(TraceWindow.Multiplayer, "Multiplayer closed"); m_voxelMapData = null; MyNetworkReader.ClearHandler(MyMultiplayer.ControlChannel); SyncLayer.TransportLayer.Clear(); MyNetworkReader.Clear(); MyMultiplayer.Static = null; }
public MyTransportLayer(int channel) { m_handlers.Add(MyMessageId.OLD_GAME_EVENT, HandleOldGameEvent); m_channel = channel; m_sendStream = new ByteStream(64 * 1024, true); m_receiveStream = new ByteStream(); m_loopback = MyNetworkReader.SetHandler(channel, HandleMessage, MyReceiveQueue.Mode.Timer, Timer); }
public virtual void Dispose() { MyNetworkMonitor.Dispose(); this.m_voxelMapData = null; MyNetworkReader.ClearHandler(0); this.SyncLayer.TransportLayer.Clear(); MyNetworkReader.Clear(); this.m_sendPhysicsStream.Dispose(); this.ReplicationLayer.Dispose(); this.ClientKicked -= new Action <ulong>(this.KickClient); Sandbox.Engine.Multiplayer.MyMultiplayer.Static = null; }
internal MyMultiplayerBase(MySyncLayer syncLayer) { this.SyncLayer = syncLayer; this.IsConnectionDirect = true; this.IsConnectionAlive = true; this.m_kickedClients = new ConcurrentDictionary <ulong, int>(); this.m_bannedClients = new MyConcurrentHashSet <ulong>(); this.m_wrongPasswordClients = new Dictionary <ulong, int>(); this.m_lastKickUpdate = MySandboxGame.TotalTimeInMilliseconds; MyNetworkMonitor.Init(); MyNetworkReader.SetHandler(0, new NetworkMessageDelegate(this.ControlMessageReceived), new Action <ulong>(this.DisconnectClient)); this.RegisterControlMessage <MyControlKickClientMsg>(MyControlMessageEnum.Kick, new ControlMessageHandler <MyControlKickClientMsg>(this.OnClientKick), MyMessagePermissions.ToServer | MyMessagePermissions.FromServer); this.RegisterControlMessage <MyControlDisconnectedMsg>(MyControlMessageEnum.Disconnected, new ControlMessageHandler <MyControlDisconnectedMsg>(this.OnDisconnectedClient), MyMessagePermissions.ToServer | MyMessagePermissions.FromServer); this.RegisterControlMessage <MyControlBanClientMsg>(MyControlMessageEnum.Ban, new ControlMessageHandler <MyControlBanClientMsg>(this.OnClientBan), MyMessagePermissions.ToServer | MyMessagePermissions.FromServer); this.RegisterControlMessage <MyControlSendPasswordHashMsg>(MyControlMessageEnum.SendPasswordHash, new ControlMessageHandler <MyControlSendPasswordHashMsg>(this.OnPasswordHash), MyMessagePermissions.ToServer); syncLayer.TransportLayer.DisconnectPeerOnError = new Action <ulong>(this.DisconnectClient); this.ClientKicked += new Action <ulong>(this.KickClient); }
internal MyMultiplayerBase(MySyncLayer syncLayer) { SyncLayer = syncLayer; m_controlSendStream = new ByteStream(64 * 1024, true); m_controlReceiveStream = new ByteStream(); m_kickedClients = new Dictionary <ulong, int>(); m_bannedClients = new HashSet <ulong>(); m_lastKickUpdate = MySandboxGame.TotalTimeInMilliseconds; MyNetworkReader.SetHandler(MyMultiplayer.ControlChannel, ControlMessageReceived); RegisterControlMessage <MyControlWorldRequestMsg>(MyControlMessageEnum.WorldRequest, OnWorldRequest); RegisterControlMessage <MyControlAckMessageMsg>(MyControlMessageEnum.Ack, OnAck); RegisterControlMessage <MyControlKickClientMsg>(MyControlMessageEnum.Kick, OnClientKick); RegisterControlMessage <MyControlDisconnectedMsg>(MyControlMessageEnum.Disconnected, OnDisconnectedClient); RegisterControlMessage <MyControlBanClientMsg>(MyControlMessageEnum.Ban, OnClientBan); RegisterControlMessage <MyControlPingMsg>(MyControlMessageEnum.Ping, OnPing); //m_serializers[typeof(MyControlMessageData)] = new XmlSerializer(typeof(MyControlMessageData)); }
public override void LoadData() { base.LoadData(); Static = this; m_VoIP = new VoIP(); m_voiceChatLogic = Activator.CreateInstance(MyPerGameSettings.VoiceChatLogic) as IMyVoiceChatLogic; m_recording = false; m_compressedVoiceBuffer = new byte[COMPRESSED_SIZE]; m_uncompressedVoiceBuffer = new byte[UNCOMPRESSED_SIZE]; m_voices = new Dictionary <ulong, MyEntity3DSoundEmitter>(); m_receivedVoiceData = new Dictionary <ulong, ReceivedData>(); m_keys = new List <ulong>(); Sync.Players.PlayerRemoved += Players_PlayerRemoved; m_enabled = MyAudio.Static.EnableVoiceChat; MyAudio.Static.VoiceChatEnabled += Static_VoiceChatEnabled; MyHud.VoiceChat.VisibilityChanged += VoiceChat_VisibilityChanged; MyNetworkReader.SetHandler(MyMultiplayer.VoiceChatChannel, VoiceMessageReceived); }
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; } } }
private void Deregister() { MyNetworkReader.ClearHandler(m_channel); Peer2Peer.ConnectionFailed -= Peer2Peer_ConnectionFailed; }
public void Clear() { MyNetworkReader.ClearHandler(MyMultiplayer.GameEventChannel); }
public MyTransportLayer(int channel) { this.m_channel = channel; this.DisconnectPeerOnError = null; MyNetworkReader.SetHandler(channel, new NetworkMessageDelegate(this.HandleMessage), x => this.DisconnectPeerOnError(x)); }
public void Clear() { MyNetworkReader.ClearHandler(2); this.ClearBuffer(); }