View Javadoc

1   package fr.ove.clientserver;
2   
3   import java.io.*;
4   import java.net.*;
5   import java.util.*;
6   import fr.ove.clientserver.events.*;
7   
8   /***
9   * A socket server.
10  */
11  public class SocketServer implements Runnable {    
12      /***
13      * The port number used on the host to run the socket server.
14      */
15      private int portNumber;
16      
17      /***
18      * The socket server.
19      */
20      private ServerSocket serverSocket;
21      
22      /***
23      * The listener of the instance. Should be the server by itself
24      */
25      private SocketServerListener listener = null;
26      
27      /***
28      * The default constructor.<BR>
29      * The default is a socket server running on port 6666 and allowing the creation
30      * of a maximum of 300 sockets.
31      */
32      public SocketServer() throws IOException {
33          this(6666, 300);
34      }
35      
36      
37      /***
38      * The constructor.
39      * @param portNumber the port number used on the host to run the socket server.
40      * @param maxSocket the maximu number of socket created allowed.
41      */
42      public SocketServer(int portNumber, int maxSocket) throws IOException {
43          this.portNumber = portNumber;
44          // Create the socket server.
45          // If creation failed, IOException is thrown
46          serverSocket = new ServerSocket(portNumber, maxSocket);
47          // Create a Thread running the instance and start it.
48          new Thread(this).start();
49      }
50      
51      /***
52      * Registers a listener to the instance.
53      * @param listener the listener to register.
54      */
55      public synchronized void addSocketServerListener(SocketServerListener listener) throws TooManyListenersException {
56          if (listener != null)
57              this.listener = listener;
58          else
59              throw new TooManyListenersException();
60      }
61      
62      /***
63      * Removes a registered listener from the instance.
64      * @param listener the listener to remove.
65      */
66      public synchronized void removeSocketServerListener(SocketServerListener listener) {
67          if (this.listener == listener)
68              this.listener = null;
69      }
70      
71      /***
72      * Fires an event to the registered listeners of the instance.
73      * @param evt the event to fire.
74      */
75      public synchronized void fireSocketServerEvent(SocketServerEvent evt) {
76          listener.socketAccepted(evt);
77      }
78      
79      // Runnable interface implementation.
80      
81      /***
82      * Run the socket server.
83      */
84      public void run() {
85          try {
86              Socket socket = null;
87              SocketServerEvent evt = new SocketServerEvent(this);
88              
89              while (true) {
90                  socket = serverSocket.accept();
91                  evt.setSocket(socket);
92                  fireSocketServerEvent(evt);
93              }
94          }
95          catch (IOException ioe) {
96              System.out.println("Something occurred while waiting for socket");
97              ioe.printStackTrace();
98          }
99      }
100 }