Skip to content

Commit 27d58e3

Browse files
committed
First idea of Websockets (Not working yet)
1 parent 920e079 commit 27d58e3

3 files changed

Lines changed: 99 additions & 4 deletions

File tree

‎src/main/java/org/javawebstack/httpserver/Exchange.java‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ public Exchange enableMultipart(String location){
174174
enableMultipart(location, -1L);
175175
return this;
176176
}
177+
177178
public Exchange enableMultipart(String location, long maxFileSize){
178179
request.setAttribute("org.eclipse.jetty.multipartConfig", new MultipartConfigElement(location, maxFileSize, -1L, 0));
179180
return this;

‎src/main/java/org/javawebstack/httpserver/HTTPServer.java‎

Lines changed: 50 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,13 @@
33
import com.google.gson.FieldNamingPolicy;
44
import com.google.gson.Gson;
55
import com.google.gson.GsonBuilder;
6+
import org.eclipse.jetty.server.handler.ContextHandler;
7+
import org.eclipse.jetty.server.handler.HandlerCollection;
68
import org.eclipse.jetty.util.log.Log;
9+
import org.eclipse.jetty.websocket.api.Session;
10+
import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
11+
import org.eclipse.jetty.websocket.server.WebSocketHandler;
12+
import org.eclipse.jetty.websocket.servlet.WebSocketServletFactory;
713
import org.javawebstack.httpserver.helper.JettyNoLog;
814
import org.javawebstack.httpserver.inject.Injector;
915
import org.javawebstack.httpserver.helper.HttpMethod;
@@ -17,14 +23,13 @@
1723
import org.eclipse.jetty.server.Server;
1824
import org.eclipse.jetty.server.handler.AbstractHandler;
1925
import org.javawebstack.httpserver.handler.*;
26+
import org.javawebstack.httpserver.websocket.WebSocket;
2027
import org.reflections.Reflections;
2128

2229
import javax.servlet.http.HttpServletRequest;
2330
import javax.servlet.http.HttpServletResponse;
2431
import java.nio.charset.StandardCharsets;
25-
import java.util.ArrayList;
26-
import java.util.Arrays;
27-
import java.util.List;
32+
import java.util.*;
2833

2934
public class HTTPServer implements RouteParamTransformerProvider {
3035

@@ -44,6 +49,7 @@ public static void main(String[] args) {
4449
private final List<RequestInterceptor> beforeInterceptors = new ArrayList<>();
4550
private Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_UNDERSCORES).setDateFormat("yyyy-MM-dd HH:mm:ss").disableHtmlEscaping().create();
4651
private Injector injector = null;
52+
private Map<String, Class> webSockets = new HashMap<>();
4753

4854
public HTTPServer(){
4955
routeParamTransformers.add(DefaultRouteParamTransformer.INSTANCE);
@@ -75,6 +81,27 @@ public HTTPServer route(HttpMethod method, String pattern, RequestHandler... han
7581
return this;
7682
}
7783

84+
public HTTPServer webSocket(String path, Class webSocketHandler){
85+
webSockets.put(path, webSocketHandler);
86+
return this;
87+
}
88+
89+
public HTTPServer webSocket(String path, WebSocket webSocketHandler){
90+
webSockets.put(path, new Object(){
91+
private Session session;
92+
93+
@OnWebSocketConnect public void onConnect(Session session){
94+
this.session = session;
95+
webSocketHandler.getWebSocketConnectionEvent().onConnect(session);
96+
}
97+
98+
@OnWebSocketConnect public void onMessage(String message){
99+
webSocketHandler.getWebSocketMessageEvent().onMessage(session, message);
100+
}
101+
}.getClass());
102+
return this;
103+
}
104+
78105
public HTTPServer notFound(RequestHandler handler){
79106
notFoundHandler = handler;
80107
return this;
@@ -149,7 +176,25 @@ public HTTPServer port(int port){
149176
public HTTPServer start(){
150177
Log.setLog(new JettyNoLog());
151178
server = new Server(port);
152-
server.setHandler(new HttpHandler());
179+
HandlerCollection handlerCollection = new HandlerCollection();
180+
181+
handlerCollection.addHandler(new HttpHandler());
182+
183+
webSockets.forEach((path, webSocketHandler)->{
184+
ContextHandler contextHandler = new ContextHandler();
185+
contextHandler.setHandler(new WebSocketHandler() {
186+
@Override
187+
public void configure(WebSocketServletFactory webSocketServletFactory) {
188+
webSocketServletFactory.register(webSocketHandler);
189+
}
190+
});
191+
contextHandler.setContextPath(path);
192+
handlerCollection.addHandler(contextHandler);
193+
});
194+
195+
196+
server.setHandler(handlerCollection);
197+
153198
try {
154199
server.start();
155200
}catch (Exception ex){
@@ -210,6 +255,7 @@ public void execute(Exchange exchange){
210255
}
211256
exchange.write(transformResponse(notFoundHandler.handle(exchange)));
212257
}catch(Throwable ex){
258+
ex.printStackTrace();
213259
exchange.write(exceptionHandler.handleBytes(exchange, ex));
214260
}
215261
exchange.close();
Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package org.javawebstack.httpserver.websocket;
2+
3+
import org.eclipse.jetty.websocket.api.Session;
4+
5+
public class WebSocket {
6+
private WebSocketConnectionEvent webSocketConnectionEvent;
7+
private WebSocketErrorEvent webSocketErrorEvent;
8+
private WebSocketMessageEvent webSocketMessageEvent;
9+
10+
public WebSocket connect(WebSocketConnectionEvent event){
11+
webSocketConnectionEvent = event;
12+
return this;
13+
}
14+
15+
public WebSocket message(WebSocketMessageEvent event){
16+
webSocketMessageEvent = event;
17+
return this;
18+
}
19+
20+
public WebSocket error(WebSocketErrorEvent event){
21+
webSocketErrorEvent = event;
22+
return this;
23+
}
24+
25+
public interface WebSocketConnectionEvent{
26+
void onConnect(Session session);
27+
}
28+
29+
public interface WebSocketErrorEvent{
30+
void onError(Session session, Throwable throwable);
31+
}
32+
33+
public interface WebSocketMessageEvent{
34+
void onMessage(Session session, String message);
35+
}
36+
37+
public WebSocketConnectionEvent getWebSocketConnectionEvent() {
38+
return webSocketConnectionEvent;
39+
}
40+
41+
public WebSocketErrorEvent getWebSocketErrorEvent() {
42+
return webSocketErrorEvent;
43+
}
44+
45+
public WebSocketMessageEvent getWebSocketMessageEvent() {
46+
return webSocketMessageEvent;
47+
}
48+
}

0 commit comments

Comments
 (0)