7ecd7f7a338b38c39e10411bd853f99637173c40
[tt2015.git] / a3 / code / jtorx / server / TCPServer.java
1 import java.io.IOException;
2 import java.net.InetAddress;
3 import java.net.ServerSocket;
4 import java.net.Socket;
5 import java.net.UnknownHostException;
6
7 /**
8 * A simple TCP server. Listens for connections, and for each incoming connection,
9 * it creates a 'handler' (either echo handler or default handler) which controls
10 * that connection
11 */
12 public class TCPServer implements Runnable {
13 public ServerSocket server;
14 public Socket socket;
15 private String handler;
16
17 public TCPServer(int port, InetAddress address) {
18 try {
19 server = new ServerSocket(port, 0, address);
20 server.setReuseAddress(true);
21 System.out.println("Listening on:\n"
22 + server.getInetAddress().toString() + "\nport: "
23 + server.getLocalPort());
24 } catch (IOException e) {
25 e.printStackTrace();
26 }
27 }
28
29 public TCPServer(int port) throws UnknownHostException {
30 this(port,InetAddress.getLocalHost());
31 }
32
33 public void setHandlerType(String handlerClass) {
34 this.handler = handlerClass;
35 }
36
37 private void startHandler(Socket socket) {
38 System.out.println("Starting handler '"+ ((handler!=null) ? handler : "default") + "'");
39 if("echo".equalsIgnoreCase(handler)) {
40 new EchoHandler(socket);
41 } else {
42 new DefaultHandler(socket);
43 }
44 }
45
46 public void handleConnections() {
47 Thread thread = new Thread(this);
48 thread.start();
49 }
50
51 @Override
52 public void run() {
53 System.out.println("Waiting for client messages...");
54
55 // accept all requests for connections
56 while (true) {
57 try {
58 socket = server.accept();
59 startHandler(socket);
60 } catch (IOException e) {
61 //e.printStackTrace();
62 System.err.println("Closed socket");
63 break;
64 }
65 }
66 }
67 }