--- /dev/null
+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