/// <summary>
        /// Querys the serverinfos
        /// </summary>
        public override void GetServerInfo()
        {
            base.GetServerInfo();
            if (!IsOnline)
            {
                return;
            }
            Query(_QUERY_STATUS);

            if (ResponseString.IndexOf("disconnect") != -1)
            {
                _isOnline = false;
                return;
            }

            string[] lines = ResponseString.Substring(3).Split('\n');
            if (lines.Length < 2)
            {
                _isOnline = false;
                return;
            }
            AddParams(lines[1].Split('\\'));

            if (lines.Length > 2)
            {
                for (int i = 2; i < lines.Length; i++)
                {
                    if (lines[i].Length == 0)
                    {
                        continue;
                    }
                    _players.Add(ParsePlayer(lines[i]));
                }
            }
        }
Esempio n. 2
0
        public override void GetServerInfo()
        {
            base.GetServerInfo();
            if (!IsOnline)
            {
                return;
            }
            Query(_QUERY_STATUS);

            Offset = 23;
            string key, val;
            int    playerOffset = ResponseString.IndexOf(System.Text.Encoding.Default.GetString(new byte[] {
                0, 0, 0, 0
            }));

            playerOffset += 3;

            while (Offset < playerOffset)
            {
                key = ReadNextParam();
                val = ReadNextParam();

                if (key.Length == 0)
                {
                    continue;
                }
                _params[key] = val;
            }

            Offset = playerOffset;

            int pNr;

            while (Offset < Response.Length)
            {
                // ok that's ugly, i fix this when someone playes doom3 online ;)
                try
                {
                    pNr = _players.Add(new Player());
                    _players[pNr].Parameters.Add("playernr", Response[Offset++].ToString());
                    _players[pNr].Ping  = BitConverter.ToInt16(Response, Offset);
                    Offset             += 2;
                    _players[pNr].Score = BitConverter.ToInt16(Response, Offset);
                    Offset             += 4;         // we skip two empty bytes
                    _players[pNr].Name  = ReadNextParam();

                    // is there a next playername?
                    if ((Offset + 7) > Response.Length)
                    {
                        break;
                    }
                }
                catch (ArgumentException)
                {
                    break;
                }
            }
        }
Esempio n. 3
0
        // TOTO only tested on BFV
        private void ParseTeam()
        {
            if (!IsOnline)
            {
                return;
            }
            Offset = ResponseString.IndexOf(_SEPERATOR, 7) + 2;

            _teams.Add(ReadNextParam());
            ReadNextParam();
            _teams.Add(ReadNextParam());
        }
        // TODO make this generic would be much nicer...
        private void ParsePlayers()
        {
            if (!IsOnline)
            {
                return;
            }
            Offset = ResponseString.IndexOf(_SEPERATOR) + 2;

            int pNr;

            while (Offset < Response.Length)
            {
                pNr = _players.Add(new Player());
                _players[pNr].Name  = ReadNextParam();
                _players[pNr].Score = Int32.Parse(ReadNextParam());
                _players[pNr].Parameters.Add("deaths", ReadNextParam());
                _players[pNr].Ping = Int32.Parse(ReadNextParam());
                _players[pNr].Team = ReadNextParam();
                _players[pNr].Parameters.Add("kills", ReadNextParam());
            }
        }