public static ServerNetworkInfo GetServerNetworkInfoDirect(IPEndPoint endpoint)
        {
            ServerNetworkInfo result = null;

            QueryMaster.ServerInfo serverInfo = null;
            ReadOnlyCollection <QueryMaster.Player> players = null;

            try
            {
                using (var server = QueryMaster.ServerQuery.GetServerInstance(QueryMaster.EngineType.Source, endpoint))
                {
                    serverInfo = server.GetInfo();
                    players    = server.GetPlayers();
                }

                if (serverInfo != null)
                {
                    result            = new ServerNetworkInfo();
                    result.Name       = serverInfo.Name;
                    result.Map        = serverInfo.Map;
                    result.Players    = serverInfo.Players;
                    result.MaxPlayers = serverInfo.MaxPlayers;

                    // get the name and version of the server using regular expression.
                    if (!string.IsNullOrWhiteSpace(result.Name))
                    {
                        var match = Regex.Match(result.Name, @" - \(v([0-9]+\.[0-9]*)\)");
                        if (match.Success && match.Groups.Count >= 2)
                        {
                            // remove the version number from the name
                            result.Name = result.Name.Replace(match.Groups[0].Value, "");

                            // get the version number
                            var     serverVersion = match.Groups[1].Value;
                            Version ver;
                            if (!String.IsNullOrWhiteSpace(serverVersion) && Version.TryParse(serverVersion, out ver))
                            {
                                result.Version = ver;
                            }
                        }
                    }
                }

                if (players != null)
                {
                    // set the number of players based on the player list, excludes any players in the list without a valid name.
                    result.Players = players.Count(record => !string.IsNullOrWhiteSpace(record.Name));
                }
            }
            catch (Exception ex)
            {
                logger.Debug(String.Format("Exception checking status for: {0}:{1} {2}\r\n{3}", endpoint.Address, endpoint.Port, ex.Message, ex.StackTrace));
            }

            return(result);
        }
        private static bool GetLocalNetworkStatus(IPEndPoint endpoint, out QueryMaster.ServerInfo serverInfo, out int onlinePlayerCount)
        {
            serverInfo        = null;
            onlinePlayerCount = 0;

            try
            {
                using (var server = QueryMaster.ServerQuery.GetServerInstance(QueryMaster.EngineType.Source, endpoint))
                {
                    try
                    {
                        serverInfo = server?.GetInfo();
                    }
                    catch (Exception)
                    {
                        serverInfo = null;
                    }

                    try
                    {
                        var players = server?.GetPlayers()?.Where(p => !string.IsNullOrWhiteSpace(p.Name?.Trim()));
                        onlinePlayerCount = players?.Count() ?? 0;
                    }
                    catch (Exception)
                    {
                        onlinePlayerCount = 0;
                    }
                }
            }
            catch (SocketException ex)
            {
                Logger.Debug($"{nameof(GetLocalNetworkStatus)} failed: {endpoint.Address}:{endpoint.Port}. {ex.Message}");
                // Common when the server is unreachable.  Ignore it.
            }

            return(true);
        }
        private static bool GetLocalNetworkStatus(string gameFile, IPEndPoint endpoint, out QueryMaster.ServerInfo serverInfo, out int onlinePlayerCount)
        {
            serverInfo        = null;
            onlinePlayerCount = 0;

            try
            {
                using (var server = QueryMaster.ServerQuery.GetServerInstance(QueryMaster.EngineType.Source, endpoint))
                {
                    try
                    {
                        serverInfo = server.GetInfo();
                    }
                    catch (Exception)
                    {
                        serverInfo = null;
                    }
                }

                try
                {
                    // load the player data from the files.
                    onlinePlayerCount = DataContainer.GetOnlinePlayerCount(gameFile);
                }
                catch (Exception)
                {
                    onlinePlayerCount = 0;
                }
            }
            catch (SocketException ex)
            {
                // Common when the server is unreachable. Log and Ignore it.
                Logger.Debug($"{nameof(GetLocalNetworkStatus)} failed: {endpoint.Address}:{endpoint.Port}. {ex.Message}");
            }

            return(true);
        }