public static void ResetNetworkSystem() { NetworkConnection.ResetRequested = true; ClientConnection = new NetClient(Config); ClientConnection.Start(); NetworkServerList.RefreshMasterServers(); if (SendThread != null && !SendThread.IsCompleted) { SendThread?.Wait(1000); } if (ReceiveThread != null && !ReceiveThread.IsCompleted) { ReceiveThread?.Wait(1000); } NetworkConnection.ResetRequested = false; ReceiveThread = SystemBase.LongRunTaskFactory.StartNew(NetworkReceiver.ReceiveMain); SendThread = SystemBase.LongRunTaskFactory.StartNew(NetworkSender.SendMain); NetworkServerList.RequestServers(); }
public static void AwakeNetworkSystem() { Config.EnableMessageType(NetIncomingMessageType.ConnectionLatencyUpdated); Config.EnableMessageType(NetIncomingMessageType.NatIntroductionSuccess); Config.EnableMessageType(NetIncomingMessageType.UnconnectedData); #if DEBUG Config.EnableMessageType(NetIncomingMessageType.DebugMessage); //Config.EnableMessageType(NetIncomingMessageType.VerboseDebugMessage); #endif NetworkServerList.RequestServers(); }
public static void StartNetworkSystem() { Config.EnableMessageType(NetIncomingMessageType.ConnectionLatencyUpdated); Config.EnableMessageType(NetIncomingMessageType.NatIntroductionSuccess); Config.EnableMessageType(NetIncomingMessageType.UnconnectedData); ClientConnection = new NetClient(Config); ClientConnection.Start(); NetworkServerList.RefreshMasterServers(); SendThread.Start(TaskScheduler.Default); ReceiveThread.Start(TaskScheduler.Default); NetworkServerList.RequestServers(); }
/// <summary> /// Main receiveing thread /// </summary> public static void ReceiveMain() { try { while (!NetworkConnection.ResetRequested) { if (NetworkMain.ClientConnection.ReadMessage(out var msg)) { NetworkStatistics.LastReceiveTime = LunaNetworkTime.UtcNow; switch (msg.MessageType) { case NetIncomingMessageType.DebugMessage: LunaLog.Log("[Lidgen DEBUG] " + msg.ReadString()); break; case NetIncomingMessageType.VerboseDebugMessage: LunaLog.Log("[Lidgen VERBOSE] " + msg.ReadString()); break; case NetIncomingMessageType.NatIntroductionSuccess: NetworkServerList.HandleNatIntroduction(msg); break; case NetIncomingMessageType.ConnectionLatencyUpdated: NetworkStatistics.PingMs = (float)TimeSpan.FromSeconds(msg.ReadFloat()).TotalMilliseconds; break; case NetIncomingMessageType.UnconnectedData: NetworkServerList.HandleServersList(msg); break; case NetIncomingMessageType.Data: try { var deserializedMsg = NetworkMain.SrvMsgFactory.Deserialize(msg, LunaNetworkTime.UtcNow.Ticks); if (deserializedMsg != null) { EnqueueMessageToSystem(deserializedMsg as IServerMessageBase); } } catch (Exception e) { LunaLog.LogError($"[LMP]: Error deserializing message! {e}"); } break; case NetIncomingMessageType.StatusChanged: switch ((NetConnectionStatus)msg.ReadByte()) { case NetConnectionStatus.Disconnected: var reason = msg.ReadString(); NetworkConnection.Disconnect(reason); break; } break; default: LunaLog.Log($"[LMP]: LIDGREN: {msg.MessageType} -- {msg.PeekString()}"); break; } NetworkMain.ClientConnection.Recycle(msg); } else { Thread.Sleep(SettingsSystem.CurrentSettings.SendReceiveMsInterval); } } } catch (Exception e) { LunaLog.LogError($"[LMP]: Receive message thread error: {e}"); NetworkMain.HandleDisconnectException(e); } }
/// <summary> /// Main receiveing thread /// </summary> public static void ReceiveMain() { try { while (!MainSystem.Singleton.Quit) { NetIncomingMessage msg; while (NetworkMain.ClientConnection.ReadMessage(out msg)) { NetworkStatistics.LastReceiveTime = DateTime.Now.Ticks / TimeSpan.TicksPerMillisecond; switch (msg.MessageType) { case NetIncomingMessageType.NatIntroductionSuccess: NetworkServerList.HandleNatIntroduction(msg); break; case NetIncomingMessageType.ConnectionLatencyUpdated: NetworkStatistics.PingMs = (float)TimeSpan.FromSeconds(msg.ReadFloat()).TotalMilliseconds; break; case NetIncomingMessageType.UnconnectedData: NetworkServerList.HandleServersList(msg); break; case NetIncomingMessageType.Data: try { var deserializedMsg = NetworkMain.SrvMsgFactory.Deserialize(msg.ReadBytes(msg.LengthBytes), DateTime.UtcNow.Ticks); EnqueueMessageToSystem(deserializedMsg as IServerMessageBase); } catch (Exception e) { Debug.LogError("[LMP]: Error deserializing message!"); NetworkMain.HandleDisconnectException(e); } break; case NetIncomingMessageType.StatusChanged: switch ((NetConnectionStatus)msg.ReadByte()) { case NetConnectionStatus.Disconnected: var reason = msg.ReadString(); NetworkConnection.Disconnect(reason); break; } break; default: Debug.Log("[LMP]: LIDGREN: " + msg.MessageType + "-- " + msg.PeekString()); break; } } Thread.Sleep(SettingsSystem.CurrentSettings.SendReceiveMsInterval); } } catch (Exception e) { Debug.LogError("[LMP]: Receive message thread error: " + e); NetworkMain.HandleDisconnectException(e); } }