public static async void Start() { var config = new NetPeerConfiguration("masterserver") { Port = Port, SuppressUnreliableUnorderedAcks = true, PingInterval = 500, ConnectionTimeout = ServerMsTimeout }; config.EnableMessageType(NetIncomingMessageType.UnconnectedData); var peer = new NetServer(config); peer.Start(); CheckMasterServerListed(); LunaLog.Info($"Master server {LmpVersioning.CurrentVersion} started! Поехали!"); RemoveExpiredServers(); while (RunServer) { NetIncomingMessage msg; while ((msg = peer.ReadMessage()) != null) { switch (msg.MessageType) { case NetIncomingMessageType.DebugMessage: LunaLog.NetworkDebug(msg.ReadString()); break; case NetIncomingMessageType.VerboseDebugMessage: LunaLog.NetworkVerboseDebug(msg.ReadString()); break; case NetIncomingMessageType.WarningMessage: LunaLog.Warning(msg.ReadString()); break; case NetIncomingMessageType.ErrorMessage: LunaLog.Error(msg.ReadString()); break; case NetIncomingMessageType.UnconnectedData: var message = GetMessage(msg); if (message != null && !message.VersionMismatch) { HandleMessage(message, msg, peer); } break; } } await Task.Delay(ServerMsTick); } peer.Shutdown("So long and thanks for all the fish!"); }
public static async void StartReceiveingMessages() { try { while (ServerContext.ServerRunning) { var msg = Server.ReadMessage(); if (msg != null) { var client = TryGetClient(msg); switch (msg.MessageType) { case NetIncomingMessageType.ConnectionApproval: if (ServerContext.UsePassword) { var password = msg.ReadString(); if (password != GeneralSettings.SettingsStore.Password) { msg.SenderConnection.Deny("Invalid password"); break; } } msg.SenderConnection.Approve(); break; case NetIncomingMessageType.Data: ClientMessageReceiver.ReceiveCallback(client, msg); break; case NetIncomingMessageType.WarningMessage: LunaLog.Warning(msg.ReadString()); break; case NetIncomingMessageType.DebugMessage: LunaLog.NetworkDebug(msg.ReadString()); break; case NetIncomingMessageType.ConnectionLatencyUpdated: case NetIncomingMessageType.VerboseDebugMessage: LunaLog.NetworkVerboseDebug(msg.ReadString()); break; case NetIncomingMessageType.Error: LunaLog.Error(msg.ReadString()); break; case NetIncomingMessageType.StatusChanged: switch ((NetConnectionStatus)msg.ReadByte()) { case NetConnectionStatus.Connected: var endpoint = msg.SenderConnection.RemoteEndPoint; LunaLog.Normal($"New client Connection from {endpoint.Address}:{endpoint.Port}"); ClientConnectionHandler.ConnectClient(msg.SenderConnection); break; case NetConnectionStatus.Disconnected: var reason = msg.ReadString(); if (client != null) { ClientConnectionHandler.DisconnectClient(client, reason); } break; } break; default: var details = msg.PeekString(); LunaLog.Debug($"Lidgren: {msg.MessageType.ToString().ToUpper()} -- {details}"); break; } } else { await Task.Delay(IntervalSettings.SettingsStore.SendReceiveThreadTickMs); } } } catch (Exception e) { LunaLog.Fatal($"ERROR in thread receive! Details: {e}"); } }
public static void StartReceivingMessages() { while (ServerContext.ServerRunning) { var msg = Server.WaitMessage(ServerContext.PlayerCount > 0 ? IntervalSettings.SettingsStore.SendReceiveThreadTickMs : int.MaxValue); if (msg != null) { try { ClientStructure client = null; if (msg.SenderConnection != null) { ServerContext.Clients.TryGetValue(msg.SenderConnection.RemoteEndPoint, out client); } switch (msg.MessageType) { case NetIncomingMessageType.ConnectionApproval: if (ServerContext.UsePassword) { if (msg.ReadString() != GeneralSettings.SettingsStore.Password) { msg.SenderConnection.Deny("Invalid password"); break; } } msg.SenderConnection.Approve(); break; case NetIncomingMessageType.Data: MessageReceiver.ReceiveCallback(client, msg); if (client == null) { break; } client.BytesReceived += (uint)msg.LengthBytes; break; case NetIncomingMessageType.WarningMessage: LunaLog.Warning(msg.ReadString()); break; case NetIncomingMessageType.DebugMessage: LunaLog.NetworkDebug(msg.ReadString()); break; case NetIncomingMessageType.ConnectionLatencyUpdated: case NetIncomingMessageType.VerboseDebugMessage: LunaLog.NetworkVerboseDebug(msg.ReadString()); break; case NetIncomingMessageType.ErrorMessage: case NetIncomingMessageType.Error: LunaLog.Error(msg.ReadString()); break; case NetIncomingMessageType.StatusChanged: switch ((NetConnectionStatus)msg.ReadByte()) { case NetConnectionStatus.Connected: var endpoint = msg.SenderConnection.RemoteEndPoint; LunaLog.Normal($"New client Connection from {endpoint.Address}:{endpoint.Port}"); ClientConnectionHandler.ConnectClient(msg.SenderConnection); break; case NetConnectionStatus.Disconnected: if (client != null) { ClientConnectionHandler.DisconnectClient(client, msg.ReadString()); } break; } break; default: LunaLog.Warning($"Unhandled Lidgren Message: {msg.MessageType} -- {msg.ReadString()}"); break; } } catch (Exception e) { LunaLog.Error($"ERROR in networking thread! Details: {e}"); } } } }