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
45
46 serverSocket = new ServerSocket(portNumber, maxSocket);
47
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
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 }