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