From 26a265ec378d496705ba65eb4929dbeb3b2146d2 Mon Sep 17 00:00:00 2001 From: Sashir Estela Date: Wed, 22 Jan 2025 17:30:39 +0000 Subject: [PATCH] Adding websocket support --- .../websocket/JavaHttpWebSocketAdapter.java | 45 +++---------------- .../websocket/OkHttpWebSocketAdapter.java | 45 +++---------------- .../websocket/WebSocketAdapter.java | 29 ++++++++---- 3 files changed, 35 insertions(+), 84 deletions(-) diff --git a/src/main/java/io/github/sashirestela/cleverclient/websocket/JavaHttpWebSocketAdapter.java b/src/main/java/io/github/sashirestela/cleverclient/websocket/JavaHttpWebSocketAdapter.java index 761c0fb..13edf82 100644 --- a/src/main/java/io/github/sashirestela/cleverclient/websocket/JavaHttpWebSocketAdapter.java +++ b/src/main/java/io/github/sashirestela/cleverclient/websocket/JavaHttpWebSocketAdapter.java @@ -10,36 +10,29 @@ import java.util.Map; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; -import java.util.function.BiConsumer; -import java.util.function.Consumer; -public class JavaHttpWebSocketAdapter implements WebSocketAdapter { +public class JavaHttpWebSocketAdapter extends WebSocketAdapter { private static final Logger logger = LoggerFactory.getLogger(JavaHttpWebSocketAdapter.class); private HttpClient httpClient; private WebSocket webSocket; - private Consumer messageCallback; - private Action openCallback; - private BiConsumer closeCallback; - private Consumer errorCallback; private final StringBuilder dataBuffer = new StringBuilder(); private CompletableFuture sendFuture; private CompletableFuture closeFuture; public JavaHttpWebSocketAdapter(HttpClient httpClient) { this.httpClient = httpClient; - logger.debug("Created WebSocketAdapter with custom HttpClient"); + logger.debug("Created JavaHttpWebSocketAdapter"); } public JavaHttpWebSocketAdapter() { - this.httpClient = HttpClient.newHttpClient(); - logger.debug("Created WebSocketAdapter with default HttpClient"); + this(HttpClient.newHttpClient()); } @Override @SuppressWarnings("java:S3776") public CompletableFuture connect(String url, Map headers) { - logger.info("Connecting to WebSocket URL: {}", url); + logger.debug("Connecting to WebSocket URL: {}", url); logger.debug("Connection headers: {}", headers); WebSocket.Builder builder = this.httpClient.newWebSocketBuilder(); @@ -52,7 +45,7 @@ public CompletableFuture connect(String url, Map headers) @Override public void onOpen(WebSocket webSocket) { JavaHttpWebSocketAdapter.this.webSocket = webSocket; - logger.info("WebSocket connection established"); + logger.debug("WebSocket connection established"); if (openCallback != null) { openCallback.execute(); } @@ -82,7 +75,7 @@ public CompletionStage onText(WebSocket webSocket, CharSequence data, boolean @Override public CompletionStage onClose(WebSocket webSocket, int statusCode, String reason) { - logger.info("WebSocket closing with code: {}, reason: {}", statusCode, reason); + logger.debug("WebSocket closing with code: {}, reason: {}", statusCode, reason); if (closeCallback != null) { closeCallback.accept(statusCode, reason); } @@ -130,7 +123,7 @@ public CompletableFuture send(String message) { @Override public void close() { if (webSocket != null) { - logger.info("Initiating WebSocket close"); + logger.debug("Initiating WebSocket close"); closeFuture = new CompletableFuture<>(); webSocket.sendClose(WebSocket.NORMAL_CLOSURE, "Closing connection"); try { @@ -145,28 +138,4 @@ public void close() { } } - @Override - public void onMessage(Consumer callback) { - logger.trace("Registering message callback"); - this.messageCallback = callback; - } - - @Override - public void onOpen(Action callback) { - logger.trace("Registering open callback"); - this.openCallback = callback; - } - - @Override - public void onClose(BiConsumer callback) { - logger.trace("Registering close callback"); - this.closeCallback = callback; - } - - @Override - public void onError(Consumer callback) { - logger.trace("Registering error callback"); - this.errorCallback = callback; - } - } diff --git a/src/main/java/io/github/sashirestela/cleverclient/websocket/OkHttpWebSocketAdapter.java b/src/main/java/io/github/sashirestela/cleverclient/websocket/OkHttpWebSocketAdapter.java index 3f98fdb..d5bb627 100644 --- a/src/main/java/io/github/sashirestela/cleverclient/websocket/OkHttpWebSocketAdapter.java +++ b/src/main/java/io/github/sashirestela/cleverclient/websocket/OkHttpWebSocketAdapter.java @@ -11,32 +11,25 @@ import java.util.Map; import java.util.concurrent.CompletableFuture; -import java.util.function.BiConsumer; -import java.util.function.Consumer; -public class OkHttpWebSocketAdapter implements WebSocketAdapter { +public class OkHttpWebSocketAdapter extends WebSocketAdapter { private static final Logger logger = LoggerFactory.getLogger(OkHttpWebSocketAdapter.class); private OkHttpClient okHttpClient; private WebSocket webSocket; - private Consumer messageCallback; - private Action openCallback; - private BiConsumer closeCallback; - private Consumer errorCallback; public OkHttpWebSocketAdapter(OkHttpClient okHttpClient) { this.okHttpClient = okHttpClient; - logger.debug("Created WebSocketAdapter with custom OkHttpClient"); + logger.debug("Created OkHttpWebSocketAdapter"); } public OkHttpWebSocketAdapter() { - this.okHttpClient = new OkHttpClient(); - logger.debug("Created WebSocketAdapter with default OkHttpClient"); + this(new OkHttpClient()); } @Override public CompletableFuture connect(String url, Map headers) { - logger.info("Connecting to WebSocket URL: {}", url); + logger.debug("Connecting to WebSocket URL: {}", url); logger.debug("Connection headers: {}", headers); Request.Builder requestBuilder = new Request.Builder().url(url); @@ -47,7 +40,7 @@ public CompletableFuture connect(String url, Map headers) @Override public void onOpen(WebSocket webSocket, Response response) { - logger.info("WebSocket connection established with response code: {}", response.code()); + logger.debug("WebSocket connection established with response code: {}", response.code()); if (openCallback != null) { openCallback.execute(); } @@ -64,7 +57,7 @@ public void onMessage(WebSocket webSocket, String text) { @Override public void onClosing(WebSocket webSocket, int code, String reason) { - logger.info("WebSocket closing with code: {}, reason: {}", code, reason); + logger.debug("WebSocket closing with code: {}, reason: {}", code, reason); if (closeCallback != null) { closeCallback.accept(code, reason); } @@ -103,7 +96,7 @@ public CompletableFuture send(String message) { @Override public void close() { if (webSocket != null) { - logger.info("Initiating WebSocket close"); + logger.debug("Initiating WebSocket close"); webSocket.close(1000, "Closing connection"); okHttpClient.dispatcher().executorService().shutdown(); okHttpClient.connectionPool().evictAll(); @@ -111,28 +104,4 @@ public void close() { } } - @Override - public void onMessage(Consumer callback) { - logger.trace("Registering message callback"); - this.messageCallback = callback; - } - - @Override - public void onOpen(Action callback) { - logger.trace("Registering open callback"); - this.openCallback = callback; - } - - @Override - public void onClose(BiConsumer callback) { - logger.trace("Registering close callback"); - this.closeCallback = callback; - } - - @Override - public void onError(Consumer errorCallback) { - logger.trace("Registering error callback"); - this.errorCallback = errorCallback; - } - } diff --git a/src/main/java/io/github/sashirestela/cleverclient/websocket/WebSocketAdapter.java b/src/main/java/io/github/sashirestela/cleverclient/websocket/WebSocketAdapter.java index 071c5f3..e03cdd0 100644 --- a/src/main/java/io/github/sashirestela/cleverclient/websocket/WebSocketAdapter.java +++ b/src/main/java/io/github/sashirestela/cleverclient/websocket/WebSocketAdapter.java @@ -5,20 +5,33 @@ import java.util.function.BiConsumer; import java.util.function.Consumer; -public interface WebSocketAdapter { +public abstract class WebSocketAdapter { - CompletableFuture connect(String url, Map headers); + protected Consumer messageCallback; + protected Action openCallback; + protected BiConsumer closeCallback; + protected Consumer errorCallback; - CompletableFuture send(String message); + public abstract CompletableFuture connect(String url, Map headers); - void close(); + public abstract CompletableFuture send(String message); - void onMessage(Consumer callback); + public abstract void close(); - void onOpen(Action callback); + public void onMessage(Consumer callback) { + this.messageCallback = callback; + } - void onClose(BiConsumer callback); + public void onOpen(Action callback) { + this.openCallback = callback; + } - void onError(Consumer callback); + public void onClose(BiConsumer callback) { + this.closeCallback = callback; + } + + public void onError(Consumer errorCallback) { + this.errorCallback = errorCallback; + } }