Source code: CSServerList/CSServerList.java
1 package CSServerList;
2
3 import java.io.*;
4 import java.net.*;
5 import java.util.*;
6 import jcsq.CSServer;
7 import jcsq.player.Player;
8 import jcsq.serverinfo.ServerInfo;
9 import jcsq.rules.Rules;
10
11 /**
12 A <code>CSServerList</code> object represents a list of CounterStrike gaming servers.
13
14 @author Mitch Davis
15 @version 0.1.3a
16 @see <a href="http://sourceforge.net/projects/jcsgp/">JCSGP Project</a>
17 */
18
19
20 public class CSServerList
21 {
22 /**
23 Constructor for the CSServerList, creates a Server list based upon a list of IP's in an ANSI text file
24 Usage example:
25 <code>CSServerList myServers = new CSServerList("servers.ip");</code>
26
27 @param sFileName a string containing the filename to use (URL support coming soon)
28
29
30 */
31 public CSServerList(String sFileName)
32 {
33 try{
34 this.brFile = new BufferedReader( new FileReader( sFileName ) );
35 bFileOpenAlready = true;
36 }
37 catch(IOException e){
38 e.printStackTrace();
39 }
40
41 readServers();
42 }
43
44 /** TO BE IMPLIMENTED LATER
45 public CSServerList(InputStreamReader isrFile)
46 {
47 try{
48 this.brFile = new BufferedReader(isrFile);
49 bFileOpenAlready = true;
50 }
51 catch(IOException e){
52 e.printStackTrace();
53 }
54
55 readServers();
56 }
57
58 public boolean closeFile()
59 {
60 if( bFileOpenAlready )
61 {
62 try{
63 brFile.close();
64 }
65 catch(IOException e){
66 e.printStackTrace();
67 }
68 return true;
69 }
70 else
71 return false;
72 }
73 */
74
75 /**
76 <code>openFile</code> - opens specified file (URL support coming soon) if a file has not already been opened
77 Multiple server files support coming soon. This function is currently not supported.
78
79 @param sFileName a string containing the filename to use
80
81 */
82 public boolean openFile( String sFileName )
83 {
84 if( bFileOpenAlready )
85 return false;
86 else
87 {
88 try{
89 brFile = new BufferedReader( new FileReader(sFileName) );
90 }
91 catch(IOException e){
92 e.printStackTrace();
93 }
94
95 readServers();
96 return true;
97 }
98 }
99
100 /**
101 <code>getNumServers</code> returns the number of servers in the CSServerList
102 Usage example:
103 <code>CSServerList myServers = ....
104 .
105 .
106 .
107 int nServerListSize = myServers.getNumServers();</code>
108
109 @return integer of the number of servers in the list
110 */
111 public int getNumServers()
112 {
113 return serverIPList.size();
114 }
115 /**
116 <code>getServerList</code> returns a String[] of all the IP's in the server list
117 Usage example:
118 <code>CSServerList myServers = ....
119 .
120 .
121 .
122 String[] sIpList = myServers.getServerList();</code>
123
124 @return a String[] of IP's in xxx.xxx.xxx.xxx format
125 */
126 public String[] getServerList()
127 {
128 String[] servers = new String[serverIPList.size()];
129 serverIPList.toArray(servers);
130
131 return servers;
132 }
133 /**
134 <code>getServerIP</code> gets a specified server's IP in a String format
135 Usage example:
136 <code>CSServerList myServers = .....
137 .
138 .
139 .
140 String sServerIP = myServer.getServerIP(0);</code>
141 @param i the index number of the server whose IP is to be retrieved
142 @return a String of the server's IP
143 */
144 public String getServerIP(int i)
145 {
146 return ((CSServer)serverList.get(i)).getIp();
147 }
148 /**
149 <code>getServerInfo</code> returns a specified server's ServerInfo object
150 Usage example:
151 <code>CSServerList myServers = ....
152 .
153 .
154 .
155 ServerInfo siServerInfo = new ServerInfo();
156 siServerInfo = myServers.getServerInfo(0);</code>
157 @param i the index number of the server whose ServerInfo is to be retrieved
158 @return a ServerInfo object for the specified server
159 */
160 public ServerInfo getServerInfo(int i)
161 {
162 ServerInfo server = (ServerInfo)infoList.get(i);
163 return server;
164 }
165 /**
166 <code>getCSServer</code> returns a pointer to a specified server's CSServer object
167 Usage example:
168 <code>CSServerList myServers = ....
169 .
170 .
171 .
172 CSServer csServer = myServers.getCSServer(0);</code>
173 use clone to make a copy of the object
174 @param i the index number of the server whose CSServer is to be recieved
175 @return a pointer to the CSServer object for the specified server
176 */
177 public CSServer getCSServer(int i)
178 {
179 return (CSServer)serverList.get(i);
180 }
181 /**
182 <code>getPing</code> will ping a server
183 Usage example:
184 <code>CSServerList myServers = ....
185 .
186 .
187 .
188 int ping = myServer.getPing(0);
189 @param i the index number of the server to be pinged
190 @return a 'long' representing th eping in miliseconds
191 */
192 public long getPing(int i)
193 {
194 return ((Long)pingList.get(i)).longValue();
195 }
196
197 public void addServer(String server)
198 {
199 serverIPList.add(server);
200 }
201
202 /**
203 public void refreshServers(int[] indexNums);
204 {
205 //TODO
206 }
207
208 public void refreshServers()
209 {
210 //TODO
211 }
212 */
213
214
215 private void readServers()
216 {
217 serverIPList = new ArrayList(10);
218 serverList = new ArrayList(10);
219 infoList = new ArrayList(10);
220 pingList = new ArrayList(10);
221
222 String line;
223 try{
224 while( (line = brFile.readLine()) != null )
225 serverIPList.add( new String( line ) );
226 for( int i = 0; i < serverIPList.size(); i++)
227 {
228 CSServer serverTemp = new CSServer( (String)serverIPList.get(i), 27005 );
229 ServerInfo infoTemp = new ServerInfo();
230 serverTemp.setTimeout(100);
231 infoTemp = serverTemp.getServerInfo();
232
233 serverTemp.closeServer();
234
235 Long pingTemp = new Long( serverTemp.ping() );
236
237
238
239 serverList.add( serverTemp );
240 pingList.add( pingTemp );
241 //don't ask... it just works
242 for(int j = 0; j < 1000000; j++)
243 {
244 }
245 infoList.add( infoTemp );
246
247 }
248 }
249 catch(IOException e)
250 {
251 e.printStackTrace();
252 }
253 catch(Exception e){
254 System.out.println("Couldn't connect to server, reason: "+e.getMessage());
255 e.printStackTrace();
256 }
257
258
259 }
260
261
262 //inputstream objects
263 private BufferedReader brFile;
264 private boolean bFileOpenAlready;
265 private ArrayList serverIPList;
266 private ArrayList serverList;
267 private ArrayList infoList;
268 private ArrayList pingList;
269
270 }