View Javadoc

1   package net.sourceforge.queried.gametypes;
2   
3   
4   import java.util.ArrayList;
5   import java.util.Collections;
6   
7   import net.sourceforge.queried.PlayerInfo;
8   import net.sourceforge.queried.ScoreComparator;
9   import net.sourceforge.queried.ServerInfo;
10  import net.sourceforge.queried.Util;
11  
12  
13  /**
14   * Thanks GibbaTheHutt (quakenet:#warsow) for pointing me to the correct query string.
15   * 
16   * @author mcrandello
17   */
18  public class WSWServerInfo {
19  	
20      public static ServerInfo getDetails(int localPort, String ipStr, int port, int infoType, int queryType,
21              int gameType) {
22          String queryResult = Util.getInfo(localPort, ipStr, port, "getstatus",
23                  infoType, queryType, gameType);
24  
25          ServerInfo serverInfo = null;
26  
27          if (queryResult != null && queryResult.length() > 0) {
28              queryResult = queryResult.substring(queryResult.indexOf("\n"));
29              queryResult = queryResult.replaceAll(
30                      "\\^([0-9a-wyzA-WYZ]|x[0-9a-fA-F]{6})", "");
31              serverInfo = new ServerInfo();
32              serverInfo.setGame(Util.getPart(queryResult, "gamename")); 
33              serverInfo.setIp(ipStr);
34              serverInfo.setPort(port + "");
35              serverInfo.setName(Util.getPart(queryResult, "sv_hostname"));
36  
37              serverInfo.setPlayerCount(
38                      queryResult.substring(queryResult.indexOf("\\clients\\") + 9,
39                      queryResult.indexOf("\\clients\\") + 10));
40              serverInfo.setMaxPlayers(Util.getPart(queryResult, "sv_maxclients"));
41              serverInfo.setMap(Util.getPart(queryResult, "mapname"));
42              serverInfo.setFullResponse(queryResult);
43          }
44  
45          return serverInfo;
46      }
47  
48      public static ArrayList getPlayers(int localPort, String ipStr, int port, int infoType, int queryType,
49              int gameType) {
50              
51          ArrayList playerInfo = new ArrayList();
52          String queryResult = Util.getInfo(localPort, ipStr, port, "getstatus",
53                  infoType, queryType, gameType);
54  
55          if (queryResult == null || queryResult.length() < 1) {
56              return playerInfo;
57          }
58          
59          queryResult = queryResult.substring(
60                  queryResult.indexOf("\\clients\\") + 9,
61                  queryResult.indexOf("\\challenge\\"));
62          queryResult = queryResult.replaceAll(
63                  "\\^([0-9a-wyzA-WYZ]|x[0-9a-fA-F]{6})", "");
64          
65          if (queryResult != null
66                  || Integer.parseInt(queryResult.substring(0, 1)) != 0) // if clients = 0 then forget it
67          {
68              String[] plyrs = queryResult.split("\n");
69  
70              for (int i = 0; i < plyrs.length; i++) {}
71              for (int x = 1; x < plyrs.length; x++) {
72                  
73                  String plyr = plyrs[x];
74                  String score = plyr.substring(0, plyr.indexOf(" ")).trim();
75                  String whatsit = plyr.substring(plyr.indexOf(" "), plyr.lastIndexOf(" ")).trim();
76                  String name = plyr.substring(plyr.indexOf("\"") + 1, plyr.lastIndexOf("\"")).trim();
77                  PlayerInfo player = new PlayerInfo();
78  
79                  player.setDeaths(-9999);
80                  player.setKills(Integer.valueOf(score).intValue());
81                  // player.setKills(-9999);
82                  player.setName(name);
83                  player.setScore(Integer.valueOf(whatsit).intValue());                
84                  playerInfo.add(player);
85                  
86              }
87                  Collections.sort(playerInfo, new ScoreComparator());
88  
89          }
90          return playerInfo;
91          
92      }
93  	
94  }