public async void RefreshMasterServersList() { if (!GeneralSettings.SettingsStore.RegisterWithMasterServer) { return; } while (ServerContext.ServerRunning) { lock (MasterServerEndpoints) { MasterServerEndpoints.Clear(); MasterServerEndpoints.AddRange(MasterServerRetriever.RetrieveWorkingMasterServersEndpoints() .Select(Common.CreateEndpointFromString)); } await Task.Delay((int)TimeSpan.FromMinutes(10).TotalMilliseconds); } }
public void RegisterWithMasterServer() { if (!GeneralSettings.SettingsStore.RegisterWithMasterServer) { return; } var adr = NetUtility.GetMyAddress(out var _); var endpoint = new IPEndPoint(adr, ServerContext.Config.Port); if (MasterServerEndpoints == null || !MasterServerEndpoints.Any()) { MasterServerEndpoints = MasterServerRetriever.RetrieveWorkingMasterServersEndpoints() .Select(Common.CreateEndpointFromString) .ToArray(); } LunaLog.Normal("Registering with master servers..."); while (ServerContext.ServerRunning) { var msgData = new MsRegisterServerMsgData { Id = Server.UniqueIdentifier, Cheats = GeneralSettings.SettingsStore.Cheats, ShowVesselsInThePast = GeneralSettings.SettingsStore.ShowVesselsInThePast, Description = GeneralSettings.SettingsStore.Description, DropControlOnExit = GeneralSettings.SettingsStore.Cheats, DropControlOnExitFlight = GeneralSettings.SettingsStore.Cheats, DropControlOnVesselSwitching = GeneralSettings.SettingsStore.Cheats, GameMode = (int)GeneralSettings.SettingsStore.GameMode, InternalEndpoint = $"{endpoint.Address}:{endpoint.Port}", MaxPlayers = GeneralSettings.SettingsStore.MaxPlayers, ModControl = (int)GeneralSettings.SettingsStore.ModControl, PlayerCount = ServerContext.Clients.Count, ServerName = GeneralSettings.SettingsStore.ServerName, ServerVersion = VersionInfo.VersionNumber, VesselUpdatesSendMsInterval = GeneralSettings.SettingsStore.VesselUpdatesSendMsInterval, SecondaryVesselUpdatesSendMsInterval = GeneralSettings.SettingsStore.SecondaryVesselUpdatesSendMsInterval, WarpMode = (int)GeneralSettings.SettingsStore.WarpMode }; msgData.Description = msgData.Description.Length > 200 ? msgData.Description.Substring(0, 200) : msgData.Description; msgData.ServerName = msgData.ServerName.Length > 30 ? msgData.ServerName.Substring(0, 30) : msgData.ServerName; var msg = ServerContext.MasterServerMessageFactory.CreateNew <MainMstSrvMsg>(msgData); var msgBytes = ServerContext.MasterServerMessageFactory.Serialize(msg); foreach (var masterServer in MasterServerEndpoints) { try { var outMsg = Server.CreateMessage(msgBytes.Length); outMsg.Write(msgBytes); Server.SendUnconnectedMessage(outMsg, masterServer); Server.FlushSendQueue(); } catch (Exception) { // ignored } } Thread.Sleep(MasterServerRegistrationMsInterval); } }