package org.hwo.net.http; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.Socket; import org.hwo.io.StreamReader; public class HttpServerConnection extends Thread { public static class Factory implements HttpServerConnectionFactory { @Override public HttpServerConnection createHttpServerConnection( HttpServer httpServer, Socket clientSocket) throws IOException { return new HttpServerConnection(httpServer, clientSocket); } } private HttpServer httpServer; private Socket clientSocket; private StreamReader streamReader; private BufferedWriter bufferedWriter; public HttpServerConnection(HttpServer httpServer,Socket clientSocket) throws IOException { this.httpServer = httpServer; this.clientSocket = clientSocket; this.streamReader = new StreamReader(clientSocket.getInputStream()); this.bufferedWriter = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream())); } public HttpServer getHttpServer() { return httpServer; } public Socket getClientSocket() { return clientSocket; } public StreamReader getStreamReader() { return streamReader; } public BufferedWriter getBufferedWriter() { return bufferedWriter; } private void close() throws IOException { clientSocket.close(); } @Override public void run() { try { while (!clientSocket.isClosed()) { HttpServerRequest request = httpServer.getRequestFactory().createRequest(this); doRequest(request); request.sendResponse(); } close(); } catch (IOException exception) { exception.printStackTrace(); } } public void doRequest(HttpServerRequest httpRequest) throws IOException { httpServer.getRequestHandler().doRequest(httpRequest); } }