Exemple #1
0
        private Task StartConnectionAsync()
        {
            var server = ServerQuery.GetServerInstance(EngineType.Source, this.endpoint);

            this.console = server.GetControl(this.password);
            return(Task.FromResult(true));
        }
Exemple #2
0
        private async Task ReconnectRcon()
        {
            await Task.Run(() =>
            {
                try
                {
                    _rconServer?.Dispose();
                    _rconServer = null;

                    _rconServer = ServerQuery.GetServerInstance(QueryMaster.EngineType.Source, _config.Ip, (ushort)_config.RconPort, false, 2000, 5000, 1, true);
                    _rconServer?.GetControl(_config.RconPassword);
                }
                catch (SocketException)
                {
                    _rconServer?.Dispose();
                    _rconServer = null;
                }
                catch (Exception ex)
                {
                    _rconServer?.Dispose();
                    _rconServer = null;

                    Logging.LogException($"Error when connecting to server rcon ({_config.Ip}, {_config.RconPort})", ex, typeof(SteamManager), LogLevel.WARN, ExceptionLevel.Ignored);
                }
            });
        }
Exemple #3
0
        private EmbedBuilder GetEmbedBuilder(string ip, ushort port)
        {
            var server = ServerQuery.GetServerInstance(EngineType.Source, ip, port, sendTimeout: 1000,
                                                       receiveTimeout: 1000, throwExceptions: true);

            return(GetSourceServerReplyEmbed(server));
        }
Exemple #4
0
        public static async void UpdateServerAsync()
        {
            await Task.Run(() =>
            {
                Server gta1 = ServerQuery.GetServerInstance(Game.Arma_3, "164.132.200.53", 2303, false, 1000, 1000, 0);
                Server gta2 = ServerQuery.GetServerInstance(Game.Arma_3, "164.132.202.63", 2603, false, 1000, 1000, 0);
                Server gta3 = ServerQuery.GetServerInstance(Game.Arma_3, "164.132.202.63", 2303, false, 1000, 1000, 0);

                while (true)
                {
                    ServerInfo info1 = gta1.GetInfo();
                    ServerInfo info2 = gta2.GetInfo();
                    ServerInfo info3 = gta3.GetInfo();

                    if (Application.Current != null)
                    {
                        Application.Current.Dispatcher.Invoke(async() =>
                        {
                            ShowServerInfo(info1, Win.TextBlockServer1, Win.JoinServer1Button);

                            ShowServerInfo(info2, Win.TextBlockServer2, Win.JoinServer2Button);

                            ShowServerInfo(info3, Win.TextBlockServer3, Win.JoinServer3Button);

                            await ScrapGTA(Win.TextBlockTs);
                        });
                    }

                    Task.Delay(15_000);
                }
            });
        }
 private void UpdateDataGrid()
 {
     ThreadPool.SetMinThreads(1, 1);
     ThreadPool.SetMaxThreads(8, 8);
     foreach (var item in server_config)
     {
         ThreadPool.QueueUserWorkItem(_ =>
         {
             Tuple <string, ushort> tp = item;
             Server server             = ServerQuery.GetServerInstance(EngineType.Source, tp.Item1, tp.Item2, false, 1000, 1000);
             var server_info           = server.GetInfo();
             this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart) delegate()
             {
                 if (server_info != null)
                 {
                     serverData.Add(new ServerInfoPreview()
                     {
                         Map     = server_info.Map,
                         Name    = server_info.Name,
                         Players = string.Format("{0}/{1}", server_info.Players, server_info.MaxPlayers),
                         Host    = tp.Item1,
                         Port    = tp.Item2,
                         Ping    = server_info.Ping
                     });;
                     dataGrid.Items.Refresh();
                 }
             });
         });
     }
 }
Exemple #6
0
        public void WhitelistPlayers(ArenaStars.Models.Game _game)
        {
            try
            {
                ArenaStarsContext db = new ArenaStarsContext();
                var findGame         = from x in db.Games
                                       where x.Id == _game.Id
                                       select x;
                Models.Game g = findGame.FirstOrDefault();

                User playerA = g.Participants.FirstOrDefault();
                User playerB = g.Participants.LastOrDefault();
                //Add players to the whitelist
                string playerAID = "\"" + playerA.SteamId + "\"";
                string playerBID = "\"" + playerB.SteamId + "\"";

                QueryMaster.GameServer.Server server = ServerQuery.GetServerInstance(EngineType.Source, "217.78.24.8", 28892);

                if (server.GetControl("lol"))
                {
                    server.Rcon.SendCommand("sm_whitelist_add " + playerAID);
                    server.Rcon.SendCommand("sm_whitelist_add " + playerBID);
                }
            }
            catch (Exception ex)
            {
                using (StreamWriter writer = new StreamWriter(errorsPath, true))
                {
                    writer.WriteLine("Message :" + ex.Message + "<br/>" + Environment.NewLine + "StackTrace :" + ex.StackTrace + Environment.NewLine + "Innerexception :" + ex.InnerException +
                                     "" + Environment.NewLine + "Date :" + DateTime.Now.ToString());
                    writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
                }
            }
        }
Exemple #7
0
 public void WaitForPlayers()
 {
     try
     {
         QueryMaster.GameServer.Server server = ServerQuery.GetServerInstance(EngineType.Source, "217.78.24.8", 28892);
         server.ReceiveTimeout = 200;
         bool stop = false;
         while (!stop)
         {
             ServerInfo info = server.GetInfo();
             if (info.Players == 2)
             {
                 stop = true;
             }
             Thread.Sleep(10000);
         }
     }
     catch (Exception ex)
     {
         using (StreamWriter writer = new StreamWriter(errorsPath, true))
         {
             writer.WriteLine("Message :" + ex.Message + "<br/>" + Environment.NewLine + "StackTrace :" + ex.StackTrace + Environment.NewLine + "Innerexception :" + ex.InnerException +
                              "" + Environment.NewLine + "Date :" + DateTime.Now.ToString());
             writer.WriteLine(Environment.NewLine + "-----------------------------------------------------------------------------" + Environment.NewLine);
         }
     }
 }
        private bool Reconnect()
        {
            if (this.console != null)
            {
                this.console.Dispose();
                this.console = null;
            }

            try
            {
                var endpoint = new IPEndPoint(IPAddress.Parse(this.snapshot.ServerIP), this.snapshot.RCONPort);
                var server   = ServerQuery.GetServerInstance(EngineType.Source, endpoint);
                this.console = server.GetControl(this.snapshot.AdminPassword);
                return(true);
            }
            catch (Exception ex)
            {
                _logger.Debug("Failed to connect to RCON at {0}:{1} with {2}: {3}\n{4}",
                              this.snapshot.ServerIP,
                              this.snapshot.RCONPort,
                              this.snapshot.AdminPassword,
                              ex.Message,
                              ex.StackTrace);
                return(false);
            }
        }
 public ServerInfo GetServerData()
 {
     using (QueryMaster.GameServer.Server s = ServerQuery.GetServerInstance(EngineType.Source, new IPEndPoint(this.serverConnectionInfo.ServerIP, this.serverConnectionInfo.ServerQueryPort)))
     {
         return(s.GetInfo());
     }
 }
        // shared update code

        #region UpdateServerAndDetails()
        private void UpdateServerAndDetails(UpdateRequest request, ServerRow row, bool fireRefreshSingleServerComplete)
        {
            string status = "";

            try
            {
                if (request.IsCancelled)
                {
                    return;
                }

                using (Server server = ServerQuery.GetServerInstance(EngineType.Source, row.EndPoint, false, request.Timeout, request.Timeout))
                {
                    row.Retries = 0;
                    server.SendFirstPacketTwice = this.sendFirstUdpPacketTwice;
                    server.Retries = 3;
                    status         = "timeout";
                    if (this.UpdateServerInfo(request, row, server))
                    {
                        row.GameExtension = gameExtensions.Get((Game)(row.ServerInfo.Extra?.GameId ?? row.ServerInfo.Id));
                        this.UpdatePlayers(request, row, server);
                        this.UpdateRules(request, row, server);
                        status = "ok";
                    }
                    row.RequestTimestamp = request.Timestamp;
                }

                if (request.IsCancelled) // status might have changed
                {
                    return;
                }

                if (row.Retries > 0)
                {
                    status += " (" + row.Retries + ")";
                }
            }
            catch
            {
                // this happens when you hibernate windows and the program resumes before the network connection has be reestablished
                status = "network error";
            }
            finally
            {
                row.Status = status;
                row.Update();
                request.SetDataModified();

                if (fireRefreshSingleServerComplete && !request.IsCancelled)
                {
                    this.RefreshSingleServerComplete?.Invoke(this, new ServerEventArgs(row));
                }

                if (!request.PendingTasks.IsSet)
                {
                    request.PendingTasks.Signal();
                }
            }
        }
Exemple #11
0
 public void StartGame()
 {
     QueryMaster.GameServer.Server server = ServerQuery.GetServerInstance(EngineType.Source, "217.78.24.8", 28892);
     if (server.GetControl("lol"))
     {
         server.Rcon.SendCommand("1on1");
     }
 }
Exemple #12
0
        /// <summary>
        /// Request current online players from the gameserver
        /// <para>This includes players who are still in process of joining the server but aren't actually in the server yet e.g. loading the map</para>
        /// </summary>
        /// <param name="forceRetries">Amount of tries that should be attempted to retrieve playerlist from CSGO gameserver</param>
        /// <returns></returns>
        public List <PlayerInfo> GetPlayersForced(int forceRetries)
        {
            Config.Log("GetPlayersForced(): Called");
            QueryMasterCollection <PlayerInfo> playerList = new QueryMasterCollection <PlayerInfo>(new List <PlayerInfo>());

            CurrentServer = ServerQuery.GetServerInstance(EngineType.Source, Config.ServerIP, Config.ServerPort, false, serverSendTimeOut, serverReceiveTimeOut, requestAmount, throwExceptions);

            int retries = 0;

            int currentServerSendTimeOut    = serverSendTimeOut;
            int currentServerReceiveTimeOut = serverReceiveTimeOut;
            int currentRequestAmount        = requestAmount;

            while (playerList.Count < 1 && retries < forceRetries)
            {
                try
                {
                    playerList = CurrentServer.GetPlayers();
                }
                catch (Exception ex)
                {
                    Config.Log("Exception in request:");
                    Config.Log(ex.Message);
                    Config.Log("");
                }

                if (playerList == null)
                {
                    playerList = new QueryMasterCollection <PlayerInfo>(new List <PlayerInfo>());
                }

                CurrentServer.Dispose();
                CurrentServer = ServerQuery.GetServerInstance(EngineType.Source, Config.ServerIP, Config.ServerPort, false, currentServerSendTimeOut, currentServerReceiveTimeOut, currentRequestAmount, throwExceptions);

                retries++;
                Config.Log($"GetPlayersForced(): List count: {playerList.Count}  Try: {retries}   RequestAmount: {currentRequestAmount}  SendTimeOut: {currentServerSendTimeOut}  ReceiveTimeOut: {currentServerReceiveTimeOut}");
            }

            List <PlayerInfo> sortedList = new List <PlayerInfo>();

            if (playerList.Count > 1)
            {
                Config.Log("GetPlayers(): Sorting list...SUCCESS");
                sortedList = playerList.ToList();
                sortedList = sortedList.OrderBy(playerInfo => playerInfo.Name).ToList();
            }
            else
            {
                Config.Log("GetPlayers(): FAILED");
            }

            Config.Log($"GetPlayersForced(): DONE  {retries} retries needed");

            return(sortedList);
        }
        // This method is used by our background worker to query each server on the
        // background thread and update the server info in the list
        public static List <UpdatesModel> bgUpdater(List <string> addresses)
        {
            List <UpdatesModel> results = new List <UpdatesModel>();
            string pw = decryptRcon();

            foreach (string address in addresses)
            {
                Tuple <string, UInt16> addr = splitAddr(address);
                string addrIP = addr.Item1;
                string score;
                UInt16 port = addr.Item2;

                using (var server = ServerQuery.GetServerInstance(
                           (Game)appId,
                           addrIP,
                           port,
                           throwExceptions: false,
                           retries: 0,
                           sendTimeout: timeout,
                           receiveTimeout: timeout))
                {
                    var serverInfo = server.GetInfo();

                    // If score check is disabled, skip it
                    if (Properties.Settings.Default.disableScore)
                    {
                        score = "Disabled";
                        results.Add(new UpdatesModel(serverInfo, score));
                    }
                    else if (!String.IsNullOrEmpty(pw))
                    {
                        score = getPugScore(server, pw);
                        if (score.Contains("Bad"))
                        {
                            score = "Bad password..";
                            Console.WriteLine("Bad pass..");
                            rconFailCount++;
                            results.Add(new UpdatesModel(serverInfo, score));
                        }
                        else
                        {
                            results.Add(new UpdatesModel(serverInfo, score));
                        }
                    }
                    else
                    {
                        score = "No RCON PW";
                        results.Add(new UpdatesModel(serverInfo, score));
                    }
                }
            }

            return(results);
        }