reset a3, kut Charlie ;)
[tt2015.git] / a3 / code / jtorx / server / TCPServer.java
diff --git a/a3/code/jtorx/server/TCPServer.java b/a3/code/jtorx/server/TCPServer.java
new file mode 100644 (file)
index 0000000..7ecd7f7
--- /dev/null
@@ -0,0 +1,67 @@
+import java.io.IOException;\r
+import java.net.InetAddress;\r
+import java.net.ServerSocket;\r
+import java.net.Socket;\r
+import java.net.UnknownHostException;\r
+\r
+/**\r
+ * A simple TCP server. Listens for connections, and for each incoming connection,\r
+ * it creates a 'handler' (either echo handler or default handler) which controls\r
+ * that connection\r
+ */\r
+public class TCPServer implements Runnable {\r
+       public ServerSocket server;\r
+       public Socket socket;\r
+       private String handler;\r
+       \r
+       public TCPServer(int port, InetAddress address) {\r
+               try {\r
+                       server = new ServerSocket(port, 0, address);\r
+                       server.setReuseAddress(true);\r
+                       System.out.println("Listening on:\n"\r
+                                       + server.getInetAddress().toString() + "\nport: "\r
+                                       + server.getLocalPort());\r
+               } catch (IOException e) {\r
+                       e.printStackTrace();\r
+               }\r
+       }\r
+       \r
+       public TCPServer(int port) throws UnknownHostException {\r
+               this(port,InetAddress.getLocalHost());\r
+       }\r
+       \r
+       public void setHandlerType(String handlerClass) {\r
+               this.handler = handlerClass;\r
+       }\r
+       \r
+       private void startHandler(Socket socket) {\r
+               System.out.println("Starting handler '"+ ((handler!=null) ? handler : "default") + "'");\r
+               if("echo".equalsIgnoreCase(handler)) {\r
+                       new EchoHandler(socket);\r
+               } else {\r
+                       new DefaultHandler(socket);\r
+               }\r
+       }\r
+\r
+       public void handleConnections() {\r
+               Thread thread = new Thread(this);\r
+               thread.start();\r
+       }\r
+\r
+       @Override\r
+       public void run() {\r
+               System.out.println("Waiting for client messages...");\r
+\r
+               // accept all requests for connections\r
+               while (true) {\r
+                       try {\r
+                               socket = server.accept();\r
+                               startHandler(socket);\r
+                       } catch (IOException e) {\r
+                               //e.printStackTrace();\r
+                               System.err.println("Closed socket");\r
+                               break;\r
+                       }\r
+               }\r
+       }\r
+}\r