Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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();
        }
Ejemplo n.º 4
0
        /// <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);
            }
        }
Ejemplo n.º 5
0
        /// <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);
            }
        }