summaryrefslogtreecommitdiff
path: root/api/src
diff options
context:
space:
mode:
authorMike Vink <mike1994vink@gmail.com>2021-07-13 18:30:12 +0200
committerMike Vink <mike1994vink@gmail.com>2021-07-13 18:30:12 +0200
commit9d54842c2f5b084ab1b0de4c4b8978cc43297546 (patch)
treedf649d72febeee87ec2d400ef04784b2b259ad65 /api/src
parent818b9970ef7c61e641e285b7f5ca53d69b3010e4 (diff)
feat(WebSockets): client server WebSocket connect
Diffstat (limited to 'api/src')
-rw-r--r--api/src/main/java/akkamon/api/App.java42
-rw-r--r--api/src/main/java/akkamon/api/EventSocket.java52
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();
+ }
+}