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