/// <summary>
        /// Handles a server list response from the master servers
        /// </summary>
        public static void HandleServersList(NetIncomingMessage msg)
        {
            try
            {
                var msgDeserialized = NetworkMain.MstSrvMsgFactory.Deserialize(msg, LunaNetworkTime.UtcNow.Ticks);

                //Sometimes we receive other type of unconnected messages.
                //Therefore we assert that the received message data is of MsReplyServersMsgData
                if (msgDeserialized.Data is MsReplyServersMsgData data)
                {
                    //Filter servers with different version
                    if (!LmpVersioning.IsCompatible(data.ServerVersion))
                    {
                        return;
                    }

                    if (!Servers.ContainsKey(data.Id))
                    {
                        var server = new ServerInfo
                        {
                            Id = data.Id,
                            InternalEndpoint            = data.InternalEndpoint,
                            ExternalEndpoint            = data.ExternalEndpoint,
                            Description                 = data.Description,
                            Country                     = data.Country,
                            Website                     = data.Website,
                            WebsiteText                 = data.WebsiteText,
                            Password                    = data.Password,
                            Cheats                      = data.Cheats,
                            ServerName                  = data.ServerName,
                            MaxPlayers                  = data.MaxPlayers,
                            WarpMode                    = data.WarpMode,
                            TerrainQuality              = data.TerrainQuality,
                            PlayerCount                 = data.PlayerCount,
                            GameMode                    = data.GameMode,
                            ModControl                  = data.ModControl,
                            DedicatedServer             = data.DedicatedServer,
                            RainbowEffect               = data.RainbowEffect,
                            VesselUpdatesSendMsInterval = data.VesselUpdatesSendMsInterval,
                            ServerVersion               = data.ServerVersion
                        };

                        Array.Copy(data.Color, server.Color, 3);

                        if (Servers.TryAdd(data.Id, server))
                        {
                            PingSystem.QueuePing(data.Id);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                LunaLog.LogError($"[LMP]: Invalid server list reply msg: {e}");
            }
        }
Exemple #2
0
        /// <summary>
        /// Call this method to deserialize a message
        /// </summary>
        /// <param name="lidgrenMsg">Lidgren message</param>
        /// <param name="receiveTime">Lidgren msg receive time property or LunaTime.Now</param>
        /// <returns>Full message with it's data filled</returns>
        public IMessageBase Deserialize(NetIncomingMessage lidgrenMsg, long receiveTime)
        {
            if (lidgrenMsg.LengthBytes >= 0)
            {
                var messageType = lidgrenMsg.ReadUInt16();
                var subtype     = lidgrenMsg.ReadUInt16();
                lidgrenMsg.SkipPadBits();

                var msg  = GetMessageByType(messageType);
                var data = msg.GetMessageData(subtype);

                data.Deserialize(lidgrenMsg);

                msg.SetData(data);
                msg.Data.ReceiveTime = receiveTime;
                msg.VersionMismatch  = !LmpVersioning.IsCompatible(msg.Data.MajorVersion, msg.Data.MinorVersion, msg.Data.BuildVersion);

                return(msg);
            }
            throw new Exception("Incorrect message length");
        }
        public static async void DisplayNewVersionMsg()
        {
            while (ServerContext.ServerRunning)
            {
                if (LatestVersion > LmpVersioning.CurrentVersion)
                {
                    LunaLog.Warning($"There is a new version of LMP! Please download it! Current: {LmpVersioning.CurrentVersion} Latest: {LatestVersion}");
                    if (LmpVersioning.IsCompatible(LatestVersion))
                    {
                        LunaLog.Debug("Your version is compatible with the latest version so you will still be listed in the master servers.");
                    }
                    else
                    {
                        LunaLog.Warning("Your version is NOT compatible with the latest version. You won't be listed in the master servers!");
                    }
                }

                //Sleep for 30 seconds...
                await Task.Delay(30 * 1000);
            }
        }
        public override void DrawWindowContent(int windowId)
        {
            GUILayout.BeginVertical();
            GUI.DragWindow(MoveRect);

            GUILayout.Label($"{LocalizationContainer.UpdateWindowText.Text}", LmpVersioning.IsCompatible(LatestVersion) ? BoldGreenLabelStyle : BoldRedLabelStyle);

            GUILayout.BeginVertical(BoxStyle);
            GUILayout.Label($"{LocalizationContainer.UpdateWindowText.CurrentVersion} {LmpVersioning.CurrentVersion}");
            GUILayout.Label($"{LocalizationContainer.UpdateWindowText.LatestVersion} {LatestVersion}");
            GUILayout.EndVertical();

            GUILayout.BeginVertical(BoxStyle);
            if (LmpVersioning.IsCompatible(LatestVersion))
            {
                GUILayout.Label($"{LocalizationContainer.UpdateWindowText.StillCompatible}", BoldGreenLabelStyle);
            }
            else
            {
                GUILayout.Label($"{LocalizationContainer.UpdateWindowText.NotCompatible}", BoldRedLabelStyle);
            }
            GUILayout.EndVertical();

            GUILayout.Label(LocalizationContainer.UpdateWindowText.Changelog);

            GUILayout.BeginVertical(BoxStyle);
            ScrollPos = GUILayout.BeginScrollView(ScrollPos, GUILayout.Width(WindowWidth - 5), GUILayout.Height(WindowHeight - 100));
            GUILayout.Label(Changelog);
            GUILayout.EndScrollView();
            GUILayout.EndVertical();

            if (GUILayout.Button(DownloadBigIcon, ButtonStyle))
            {
                Application.OpenURL(RepoConstants.LatestGithubReleaseUrl);
                Display = false;
            }

            GUILayout.EndVertical();
        }