/// <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}"); } }
/// <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(); }