java-org.hwo/src/org/hwo/net/http/HttpServerConnection.java

89 lines
1.8 KiB
Java

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);
}
}