Exemple #1
0
        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);
            }
        }
Exemple #2
0
        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);
            }
        }