示例#1
0
        public static List <Player> GetPlayersInfo(QueryMasterCollection <PlayerInfo> players, string status)
        {
            var result = new List <Player>();

            foreach (var p in players)
            {
                if (p.Name.Length == 0)
                {
                    continue;
                }

                var player     = new Player();
                var statusdata = ExtractData(GetLineOfPlayer(p.Name, status), player);

                player.Name       = p.Name;
                player.OnlineTime = p.Time;
                player.Score      = p.Score;
                player.Ip         = statusdata.Ip;
                player.Ping       = statusdata.Ping;
                player.UserId     = statusdata.UserId;
                player.State      = statusdata.State;
                player.SteamId    = statusdata.SteamId;


                result.Add(player);
            }

            return(result);
        }
示例#2
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);
        }
 public int getPlayer()
 {
     try
     {
         QueryMasterCollection <PlayerInfo> player = server.GetPlayers();
         return(player.Count);
     }
     catch (NullReferenceException)
     {
         return(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="currentBotHelper">Instance of the BotHelper to be able to send inbetween Telegram messages when failures occur</param>
        /// <param name="chatId">Id of the current chat request to be able to send inbetween Telegram messages when failures occur</param>
        /// <param name="playerMessage">Id of the current chat request to be able to send inbetween Telegram messages when failures occur</param>
        /// <returns></returns>
        public List <PlayerInfo> GetPlayers(BotHelper currentBotHelper, long chatId, string playerMessage)
        {
            Config.Log("GetPlayers(): Called");
            int retries = 0;
            QueryMasterCollection <PlayerInfo> playerList = new QueryMasterCollection <PlayerInfo>(new List <PlayerInfo>());

            while (playerList.Count < 1 && retries < attemptRetries)
            {
                playerList = CurrentServer.GetPlayers();
                if (playerList == null)
                {
                    playerList = new QueryMasterCollection <PlayerInfo>(new List <PlayerInfo>());
                }

                CurrentServer.Dispose();

                if (retries == 1 && playerList.Count < 1)
                {
                    currentBotHelper.SendMessageNew(chatId, $"{playerMessage} Unable to request playerlist\r\n\r\nRetrying...please wait\r\n");
                    CurrentServer = ServerQuery.GetServerInstance(EngineType.Source, Config.ServerIP, Config.ServerPort, false, serverSendTimeOut + 1000, serverReceiveTimeOut + 1000, requestAmount + 2, false);
                }
                else
                {
                    CurrentServer = ServerQuery.GetServerInstance(EngineType.Source, Config.ServerIP, Config.ServerPort, false, serverSendTimeOut, serverReceiveTimeOut, requestAmount, false);
                }

                retries++;
                Config.Log($"GetPlayers(): List count: {playerList.Count}  Try {retries}");
            }

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

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

            Config.Log($"GetPlayers(): Done. {retries} retries needed");

            return(sortedList);
        }
        /// <summary>
        /// Request current ruleset from the gameserver
        /// <para>Be aware that this can be an instensive request and in general could take a few tries.
        /// It's an extensive set, atm only used for finding the next map. You could use it to provide more information/functionality to the Telegram user</para></summary>
        /// <param name="currentBotHelper">Instance of the BotHelper to be able to send inbetween Telegram messages when failures occur</param>
        /// <param name="chatId">Id of the current chat request to be able to send inbetween Telegram messages when failures occur</param>
        /// <param name="playerMessage">Id of the current chat request to be able to send inbetween Telegram messages when failures occur</param>
        /// <returns></returns>
        public List <Rule> GetRules(BotHelper currentBotHelper, long chatId, string mapMessage)
        {
            int retries = 0;

            QueryMasterCollection <Rule> rulesCollection = new QueryMasterCollection <Rule>(new List <Rule>());

            while (rulesCollection.Count < 1 && retries < attemptRetries)
            {
                rulesCollection = CurrentServer.GetRules();
                if (rulesCollection == null)
                {
                    rulesCollection = new QueryMasterCollection <Rule>(new List <Rule>());
                }

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

                if (retries == 1 && rulesCollection.Count < 1)
                {
                    currentBotHelper.SendMessageNew(chatId, mapMessage + "Unable to request rulesset\r\n\r\nRetrying...please wait\r\n");
                    CurrentServer = ServerQuery.GetServerInstance(EngineType.Source, Config.ServerIP, Config.ServerPort, false, serverSendTimeOut + 1000, serverReceiveTimeOut + 1000, requestAmount + 2, false);
                }
                else
                {
                    CurrentServer = ServerQuery.GetServerInstance(EngineType.Source, Config.ServerIP, Config.ServerPort, false, serverSendTimeOut, serverReceiveTimeOut, requestAmount, false);
                }

                retries++;
                Config.Log($"GetRules(): List count: {rulesCollection.Count} Try {retries}");
            }

            List <Rule> rulesList = new List <Rule>();

            if (rulesCollection.Count > 1)
            {
                Config.Log("GetRules(): Sorting list...");
                rulesList = rulesCollection.ToList();
            }

            Config.Log($"GetRules(): Done. {retries} retries needed");

            return(rulesList);
        }