KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > rero > dcc > ListenDCC


1 package rero.dcc;
2
3 import java.net.*;
4 import rero.config.*;
5
6 public class ListenDCC extends GenericDCC
7 {
8    protected ServerSocket server = null;
9
10    protected static int offset = 0;
11    protected static int timeout = 60 * 1000;
12
13    public static int getNextPort()
14    {
15        int rangeStart = ClientState.getClientState().getInteger("dcc.low", ClientDefaults.dcc_low);
16        int rangeStop = ClientState.getClientState().getInteger("dcc.high", ClientDefaults.dcc_high);
17
18        offset += 1;
19        offset = offset % (rangeStop - rangeStart);
20
21        return rangeStart + offset;
22    }
23
24    /** instructs the class to listen for a connection on some port, returns the port as an integer. A return value of -1
25        indicates there was a problem binding to the port. Doh!@ */

26    public int getListenerPort()
27    {
28        try
29        {
30           server = new ServerSocket(getNextPort());
31           return server.getLocalPort();
32        }
33        catch (Exception JavaDoc ex)
34        {
35           ex.printStackTrace();
36        }
37
38        return -1;
39    }
40
41    public Socket establishConnection()
42    {
43        try
44        {
45           server.setSoTimeout(timeout);
46           return server.accept();
47        }
48        catch (SocketTimeoutException stex)
49        {
50           getImplementation().fireError("timed out waiting for connection");
51        }
52        catch (Exception JavaDoc ex)
53        {
54           ex.printStackTrace();
55
56           getImplementation().fireError(ex.getMessage());
57        }
58
59        return null;
60    }
61 }
62
Popular Tags