forked from softeerbootcamp-7th/be-was
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathConnectionHandler.java
More file actions
51 lines (43 loc) · 1.84 KB
/
ConnectionHandler.java
File metadata and controls
51 lines (43 loc) · 1.84 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
package web.dispatch;
import exception.ExceptionHandlerMapping;
import http.response.HttpResponseConverter;
import http.request.HttpRequestConverter;
import http.request.HttpRequest;
import http.response.HttpResponse;
import java.net.Socket;
public class ConnectionHandler implements Runnable{
private final Socket connection;
private final HttpRequestConverter requestConverter;
private final HttpResponseConverter responseConverter;
private final ExceptionHandlerMapping exceptionHandlerMapping;
private final Dispatcher dispatcher;
public ConnectionHandler(Dispatcher dispatcher,
ExceptionHandlerMapping exceptionHandlerMapping,
HttpResponseConverter responseConverter,
HttpRequestConverter requestConverter,
Socket connection) {
this.dispatcher = dispatcher;
this.exceptionHandlerMapping = exceptionHandlerMapping;
this.responseConverter = responseConverter;
this.requestConverter = requestConverter;
this.connection = connection;
}
@Override
public void run() {
try {
HttpRequest request = requestConverter.parseRequest(connection);
HttpResponse response = dispatcher.handle(request);
responseConverter.sendResponse(response, connection);
} catch (Exception e){
/**
* TODO:
* ExceptionHandler 또한 HttpResponse를 반환하게 하고
* finally에 `responseConverter.sendResponse(response, connection);` 를 넣어
* socket에 write를 하는 포인트를 단일 포인트로 관리
*/
exceptionHandlerMapping.handle(e, connection);
} finally {
try { connection.close(); } catch (Exception ignore) {}
}
}
}