Ejemplo n.º 1
0
        private void Update()
        {
            foreach (var server in playerCounts.Keys.Except(Servers))
            {
                playerCounts.Remove(server);
            }

            Parallel.ForEach(Servers, server =>
            {
                try
                {
                    ServerInfoResult info = server.GetServerInfoSync(infoSettings);

                    if (playerCounts.ContainsKey(server) && info.Players == playerCounts[server])
                    {
                        return;
                    }

                    playerCounts[server] = info.Players;

                    if (info.Players >= PlayerCountTrigger)
                    {
                        PlayerCountReached?.Invoke(this, new EventData
                        {
                            Server = server,
                            Info   = info
                        });
                    }
                }
                catch (SocketException e) when(e.SocketErrorCode == SocketError.TimedOut || e.SocketErrorCode == SocketError.ConnectionRefused)
                {
                }
            });
        }
Ejemplo n.º 2
0
        public static ServerInfoResult Parse(byte[] data)
        {
            var parser = new ResponseParser(data);

            parser.CurrentPosition += 5; //Header
            var result = new ServerInfoResult();

            result.Protocol    = parser.GetByte();
            result.Name        = parser.GetStringToTermination();
            result.Map         = parser.GetStringToTermination();
            result.Folder      = parser.GetStringToTermination();
            result.Game        = parser.GetStringToTermination();
            result.ID          = parser.GetShort();
            result.Players     = parser.GetByte();
            result.MaxPlayers  = parser.GetByte();
            result.Bots        = parser.GetByte();
            result.ServerType  = parser.GetStringOfByte();
            result.Environment = parser.GetStringOfByte();
            result.Visibility  = parser.GetByte();
            result.VAC         = parser.GetByte();
            result.Version     = parser.GetStringToTermination();

            //get EDF
            uint edf = parser.GetByte();

            if ((edf & 0x80) != 0) //has port number
            {
                result.Port = parser.GetShort();
            }

            return(result);
        }
Ejemplo n.º 3
0
        string Format(ServerInfoResult info, string ipAddress, int port)
        {
            var str = new List <string>();

            str.Add(string.Format("{0}{1}:{2}", "steam://connect/", ipAddress, port));
            str.Add(string.Format("Players: {0} / {1}", info.Players, info.MaxPlayers));
            str.Add("Map: " + info.GetMapInfo());
            return(ServerName + " // " + string.Join(" // ", str));
        }