diff options
| author | Mike Vink <mike1994vink@gmail.com> | 2021-07-13 18:30:12 +0200 |
|---|---|---|
| committer | Mike Vink <mike1994vink@gmail.com> | 2021-07-13 18:30:12 +0200 |
| commit | 9d54842c2f5b084ab1b0de4c4b8978cc43297546 (patch) | |
| tree | df649d72febeee87ec2d400ef04784b2b259ad65 /api/src | |
| parent | 818b9970ef7c61e641e285b7f5ca53d69b3010e4 (diff) | |
feat(WebSockets): client server WebSocket connect
Diffstat (limited to 'api/src')
| -rw-r--r-- | api/src/main/java/akkamon/api/App.java | 42 | ||||
| -rw-r--r-- | api/src/main/java/akkamon/api/EventSocket.java | 52 |
2 files changed, 94 insertions, 0 deletions
diff --git a/api/src/main/java/akkamon/api/App.java b/api/src/main/java/akkamon/api/App.java new file mode 100644 index 0000000..bc462d0 --- /dev/null +++ b/api/src/main/java/akkamon/api/App.java @@ -0,0 +1,42 @@ +package akkamon.api; + +import org.eclipse.jetty.server.Server; +import org.eclipse.jetty.server.ServerConnector; +import org.eclipse.jetty.servlet.ServletContextHandler; +import org.eclipse.jetty.websocket.server.config.JettyWebSocketServletContainerInitializer; + + +public class App { + + public static void main(String[] args) { + Server server = new Server(); + ServerConnector connector = new ServerConnector(server); + connector.setPort(8080); + server.addConnector(connector); + + // application "context" ? + ServletContextHandler context = new ServletContextHandler(ServletContextHandler.SESSIONS); + context.setContextPath("/"); + server.setHandler(context); + + // websocket behaviour + // Configure specific websocket behavior + JettyWebSocketServletContainerInitializer.configure(context, (servletContext, wsContainer) -> + { + // Configure default max size + wsContainer.setMaxTextMessageSize(65535); + + // Add websockets + wsContainer.addMapping("/", EventSocket.class); + }); + + try { + server.start(); + server.join(); + } + catch (Throwable t) { + t.printStackTrace(System.err); + } + + } +} diff --git a/api/src/main/java/akkamon/api/EventSocket.java b/api/src/main/java/akkamon/api/EventSocket.java new file mode 100644 index 0000000..1c7bafc --- /dev/null +++ b/api/src/main/java/akkamon/api/EventSocket.java @@ -0,0 +1,52 @@ +package akkamon.api; + +import java.util.Locale; +import java.util.concurrent.CountDownLatch; + +import org.eclipse.jetty.websocket.api.WebSocketAdapter; +import org.eclipse.jetty.websocket.api.Session; +import org.eclipse.jetty.websocket.api.StatusCode; + + +public class EventSocket extends WebSocketAdapter { + private final CountDownLatch closureLatch = new CountDownLatch(1); + + @Override + public void onWebSocketConnect(Session sess) + { + super.onWebSocketConnect(sess); + System.out.println("Socket Connected: " + sess); + } + + @Override + public void onWebSocketText(String message) + { + super.onWebSocketText(message); + System.out.println("Received TEXT message: " + message); + + if (message.toLowerCase(Locale.US).contains("bye")) { + getSession().close(StatusCode.NORMAL, "Thanks"); + } + } + + @Override + public void onWebSocketClose(int statusCode, String reason) + { + super.onWebSocketClose(statusCode, reason); + System.out.println("Socket Closed: [" + statusCode + "] " + reason); + closureLatch.countDown(); + } + + @Override + public void onWebSocketError(Throwable cause) + { + super.onWebSocketError(cause); + cause.printStackTrace(System.err); + } + + public void awaitClosure() throws InterruptedException + { + System.out.println("Awaiting closure from remote"); + closureLatch.await(); + } +} |
