Skip to content

Commit a19018a

Browse files
committed
Merged all response handling methods into one
1 parent b20ccd5 commit a19018a

20 files changed

+58
-61
lines changed

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ dependencies {
2323
// implementation('com.google.code.gson:gson:2.10.1')
2424

2525
compileOnly('org.jetbrains:annotations:23.0.0')
26+
testCompileOnly('org.jetbrains:annotations:23.0.0')
2627
}
2728

2829
jar {

src/main/java/dev/latvian/apps/tinyserver/HTTPServer.java

Lines changed: 12 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import dev.latvian.apps.tinyserver.http.HTTPRequest;
99
import dev.latvian.apps.tinyserver.http.Header;
1010
import dev.latvian.apps.tinyserver.http.response.HTTPPayload;
11+
import dev.latvian.apps.tinyserver.http.response.HTTPResponse;
1112
import dev.latvian.apps.tinyserver.http.response.HTTPStatus;
1213
import dev.latvian.apps.tinyserver.ws.WSEndpointHandler;
1314
import dev.latvian.apps.tinyserver.ws.WSHandler;
@@ -385,23 +386,21 @@ private void handleClient(Socket socket) {
385386
}
386387

387388
public HTTPPayload createBuilder(REQ req, @Nullable HTTPHandler<REQ> handler) {
388-
var payload = new HTTPPayload();
389-
390-
if (serverName != null && !serverName.isEmpty()) {
391-
payload.addHeader("Server", serverName);
392-
}
393-
394-
payload.addHeader("Date", HTTPPayload.DATE_TIME_FORMATTER.format(Instant.now()));
389+
var payload = new HTTPPayload(serverName, Instant.now());
395390

396391
if (handler != null) {
392+
HTTPResponse response;
393+
Throwable error;
394+
397395
try {
398-
var response = handler.handle(req);
399-
req.beforeResponse(payload, response);
400-
payload.setResponse(response);
401-
} catch (Throwable error) {
402-
payload.setStatus(HTTPStatus.INTERNAL_ERROR);
403-
req.handlePayloadError(payload, error);
396+
response = handler.handle(req);
397+
error = null;
398+
} catch (Throwable error1) {
399+
response = HTTPStatus.INTERNAL_ERROR;
400+
error = error1;
404401
}
402+
403+
payload.setResponse(req.handleResponse(payload, response, error));
405404
}
406405

407406
return payload;

src/main/java/dev/latvian/apps/tinyserver/http/HTTPRequest.java

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -232,13 +232,11 @@ public String userAgent() {
232232
return header("User-Agent");
233233
}
234234

235-
public void beforeResponse(HTTPPayload payload, HTTPResponse response) {
236-
}
237-
238-
public void afterResponse(HTTPPayload payload, HTTPResponse response) {
239-
}
235+
public HTTPResponse handleResponse(HTTPPayload payload, HTTPResponse response, @Nullable Throwable error) {
236+
if (error != null) {
237+
error.printStackTrace();
238+
}
240239

241-
public void handlePayloadError(HTTPPayload payload, Throwable error) {
242-
error.printStackTrace();
240+
return response;
243241
}
244242
}

src/main/java/dev/latvian/apps/tinyserver/http/response/ContentResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
public record ContentResponse(HTTPResponse original, ResponseContent body) implements HTTPResponse {
66
@Override
7-
public void build(HTTPPayload payload) throws Exception {
7+
public void build(HTTPPayload payload) {
88
original.build(payload);
99
payload.setBody(body);
1010
}

src/main/java/dev/latvian/apps/tinyserver/http/response/HTTPPayload.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010

1111
import java.io.OutputStream;
1212
import java.nio.charset.StandardCharsets;
13+
import java.time.Instant;
1314
import java.time.ZoneId;
1415
import java.time.format.DateTimeFormatter;
1516
import java.util.ArrayList;
@@ -22,6 +23,8 @@ public class HTTPPayload {
2223
public static final DateTimeFormatter DATE_TIME_FORMATTER = DateTimeFormatter.ofPattern("EEE, dd MMM yyyy HH:mm:ss z", Locale.ENGLISH).withZone(ZoneId.of("GMT"));
2324
private static final byte[] CRLF = "\r\n".getBytes(StandardCharsets.UTF_8);
2425

26+
private final String serverName;
27+
private final Instant serverTime;
2528
private HTTPStatus status = HTTPStatus.NO_CONTENT;
2629
private final List<Header> headers = new ArrayList<>();
2730
private String cacheControl = "";
@@ -30,6 +33,11 @@ public class HTTPPayload {
3033
private WSSession<?> wsSession = null;
3134
private List<ResponseContentEncoding> encodings;
3235

36+
public HTTPPayload(String serverName, Instant serverTime) {
37+
this.serverName = serverName;
38+
this.serverTime = serverTime;
39+
}
40+
3341
public void setStatus(HTTPStatus status) {
3442
this.status = status;
3543
}
@@ -111,7 +119,7 @@ public void addEncoding(ResponseContentEncoding encoding) {
111119
encodings.add(encoding);
112120
}
113121

114-
public void setResponse(HTTPResponse response) throws Exception {
122+
public void setResponse(HTTPResponse response) {
115123
response.build(this);
116124

117125
if (response instanceof WSResponse res) {
@@ -124,6 +132,13 @@ public void write(HTTPRequest req, OutputStream out, boolean writeBody) throws E
124132
out.write(CRLF);
125133

126134
var actualHeaders = new ArrayList<Header>(headers.size() + (cookies == null ? 0 : cookies.size()) + (cacheControl.isEmpty() ? 0 : 1));
135+
136+
if (serverName != null && !serverName.isEmpty()) {
137+
actualHeaders.add(new Header("Server", serverName));
138+
}
139+
140+
actualHeaders.add(new Header("Date", HTTPPayload.DATE_TIME_FORMATTER.format(serverTime)));
141+
127142
actualHeaders.addAll(headers);
128143

129144
if (cookies != null) {

src/main/java/dev/latvian/apps/tinyserver/http/response/HTTPResponse.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ static HTTPResponse redirectPermanently(String location) {
4646
return new RedirectResponse(EmptyResponse.INSTANCE, HTTPStatus.PERMANENT_REDIRECT, location);
4747
}
4848

49-
void build(HTTPPayload payload) throws Exception;
49+
void build(HTTPPayload payload);
5050

5151
default HTTPResponse header(String header, Object value) {
5252
return new HTTPResponseWithHeader(this, header, String.valueOf(value));

src/main/java/dev/latvian/apps/tinyserver/http/response/HTTPResponseWithCacheControl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ public HTTPResponseWithCacheControl(HTTPResponse original, boolean isPublic, Dur
88
}
99

1010
@Override
11-
public void build(HTTPPayload payload) throws Exception {
11+
public void build(HTTPPayload payload) {
1212
payload.setCacheControl(value);
1313
original.build(payload);
1414
}

src/main/java/dev/latvian/apps/tinyserver/http/response/HTTPResponseWithCookie.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ public HTTPResponseWithCookie(HTTPResponse original, String key, String value) {
7171
}
7272

7373
@Override
74-
public void build(HTTPPayload payload) throws Exception {
74+
public void build(HTTPPayload payload) {
7575
var sb = new StringBuilder();
7676
sb.append(value);
7777

src/main/java/dev/latvian/apps/tinyserver/http/response/HTTPResponseWithEncoding.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
public record HTTPResponseWithEncoding(HTTPResponse original, ResponseContentEncoding encoding) implements HTTPResponse {
66
@Override
7-
public void build(HTTPPayload payload) throws Exception {
7+
public void build(HTTPPayload payload) {
88
payload.addEncoding(encoding);
99
original.build(payload);
1010
}

src/main/java/dev/latvian/apps/tinyserver/http/response/HTTPResponseWithHeader.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
public record HTTPResponseWithHeader(HTTPResponse original, String header, String value) implements HTTPResponse {
44
@Override
5-
public void build(HTTPPayload payload) throws Exception {
5+
public void build(HTTPPayload payload) {
66
payload.addHeader(header, value);
77
original.build(payload);
88
}

0 commit comments

Comments
 (0)