diff --git a/README.md b/README.md index d89d07e..7dcda17 100644 --- a/README.md +++ b/README.md @@ -26,22 +26,14 @@ It ensures compile-time guarantees for message structure, reduces runtime errors ```groovy repositories { - mavenCentral() - - maven { - url = uri("https://maven.pkg.github.com/selimaj-dev/session-java") - credentials { - username = project.findProperty("gpr.user") ?: System.getenv("GITHUB_USERNAME") - password = project.findProperty("gpr.key") ?: System.getenv("GITHUB_TOKEN") - } - } + maven { url 'https://jitpack.io' } } ``` #### Add the dependency ```groovy dependencies { - implementation "dev.selimaj.session:session-java:0.1.0" + implementation 'com.github.selimaj-dev:session-java:v0.1.3' } ``` diff --git a/build.gradle b/build.gradle index cbeb3bb..bc9f256 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ plugins { } group = "dev.selimaj.session" -version = "0.1.0" +version = "0.1.3" java { toolchain { diff --git a/src/main/java/dev/selimaj/session/Session.java b/src/main/java/dev/selimaj/session/Session.java index 47e3236..82d284d 100644 --- a/src/main/java/dev/selimaj/session/Session.java +++ b/src/main/java/dev/selimaj/session/Session.java @@ -12,6 +12,7 @@ import java.net.URI; import java.net.http.HttpClient; import java.net.http.WebSocket; import java.util.concurrent.CompletableFuture; +import java.util.concurrent.TimeUnit; public final class Session { @@ -34,6 +35,18 @@ public final class Session { return new Session(ws, listener); } + public static Session connect(String uri, long timeout, TimeUnit unit) throws Exception { + SessionListener listener = new SessionListener(); + + WebSocket ws = HttpClient.newHttpClient() + .newWebSocketBuilder() + .buildAsync(URI.create(uri), listener) + .orTimeout(timeout, unit) + .join(); + + return new Session(ws, listener); + } + public void send(Message msg) throws Exception { listener.send(ws, msg); } @@ -50,12 +63,12 @@ public final class Session { listener.notify(ws, method, data); } - CompletableFuture request( + CompletableFuture request( Method method, Req req) throws Exception { return listener.request(ws, method.getName(), req, method.getResClass()); } - void onRequest(Method method, + void onRequest(Method method, MethodHandler handler) { MethodHandler wrapper = (id, value) -> { try { diff --git a/src/main/java/dev/selimaj/session/SessionListener.java b/src/main/java/dev/selimaj/session/SessionListener.java index c274cf5..b8638ff 100644 --- a/src/main/java/dev/selimaj/session/SessionListener.java +++ b/src/main/java/dev/selimaj/session/SessionListener.java @@ -1,6 +1,7 @@ package dev.selimaj.session; import java.net.http.WebSocket; +import java.nio.ByteBuffer; import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionStage; import java.util.concurrent.ConcurrentHashMap; @@ -13,7 +14,7 @@ import dev.selimaj.session.types.Message; import dev.selimaj.session.types.MethodHandler; public class SessionListener implements WebSocket.Listener { - public final ConcurrentHashMap> methods = new ConcurrentHashMap<>(); + final ConcurrentHashMap> methods = new ConcurrentHashMap<>(); final ObjectMapper mapper = new ObjectMapper(); private final ConcurrentHashMap> pending = new ConcurrentHashMap<>(); @@ -60,6 +61,11 @@ public class SessionListener implements WebSocket.Listener { return null; } + @Override + public CompletionStage onPing(WebSocket ws, ByteBuffer message) { + return ws.sendPong(message); + } + void send(WebSocket ws, Message msg) throws Exception { ws.sendText(mapper.writeValueAsString(msg), true); } diff --git a/src/main/java/dev/selimaj/session/types/Method.java b/src/main/java/dev/selimaj/session/types/Method.java index c7c7fa6..ce49719 100644 --- a/src/main/java/dev/selimaj/session/types/Method.java +++ b/src/main/java/dev/selimaj/session/types/Method.java @@ -1,8 +1,6 @@ package dev.selimaj.session.types; -import com.fasterxml.jackson.databind.JsonNode; - -public class Method { +public class Method { private final String name; private final Class reqClass; private final Class resClass; diff --git a/src/main/java/dev/selimaj/session/types/MethodHandler.java b/src/main/java/dev/selimaj/session/types/MethodHandler.java index b1c9879..9ac8315 100644 --- a/src/main/java/dev/selimaj/session/types/MethodHandler.java +++ b/src/main/java/dev/selimaj/session/types/MethodHandler.java @@ -2,9 +2,7 @@ package dev.selimaj.session.types; import java.util.concurrent.CompletableFuture; -import com.fasterxml.jackson.databind.JsonNode; - @FunctionalInterface -public interface MethodHandler { +public interface MethodHandler { CompletableFuture handle(int id, Req data); }