diff --git a/src/main/java/dev/selimaj/session/Session.java b/src/main/java/dev/selimaj/session/Session.java index 81d828f..5fcc57f 100644 --- a/src/main/java/dev/selimaj/session/Session.java +++ b/src/main/java/dev/selimaj/session/Session.java @@ -3,6 +3,7 @@ package dev.selimaj.session; import com.fasterxml.jackson.databind.JsonNode; import dev.selimaj.session.types.Message; +import dev.selimaj.session.types.Method; import java.net.URI; import java.net.http.HttpClient; @@ -46,11 +47,10 @@ public final class Session { listener.notify(ws, method, data); } - public CompletableFuture request( - String method, - Req data, - Class resType) throws Exception { - return listener.request(ws, method, data, resType); + CompletableFuture request( + Class> method, Req req) throws Exception { + Method m = method.getDeclaredConstructor().newInstance(); + return listener.request(ws, m.getName(), req, m.getResClass()); } public void close() throws Exception { diff --git a/src/main/java/dev/selimaj/session/types/Method.java b/src/main/java/dev/selimaj/session/types/Method.java index 8be06d6..319fe62 100644 --- a/src/main/java/dev/selimaj/session/types/Method.java +++ b/src/main/java/dev/selimaj/session/types/Method.java @@ -2,6 +2,32 @@ package dev.selimaj.session.types; import com.fasterxml.jackson.databind.JsonNode; -public interface Method { - String getName(); -} +public class Method { + private final String name; + private final Class reqClass; + private final Class resClass; + private final Class errClass; + + protected Method(String name, Class reqClass, Class resClass, Class errClass) { + this.name = name; + this.reqClass = reqClass; + this.resClass = resClass; + this.errClass = errClass; + } + + public String getName() { + return name; + } + + public Class getReqClass() { + return reqClass; + } + + public Class getResClass() { + return resClass; + } + + public Class getErrClass() { + return errClass; + } +} \ No newline at end of file diff --git a/src/test/java/dev/selimaj/session/Methods.java b/src/test/java/dev/selimaj/session/Methods.java index c13ae44..031e6e5 100644 --- a/src/test/java/dev/selimaj/session/Methods.java +++ b/src/test/java/dev/selimaj/session/Methods.java @@ -5,14 +5,9 @@ import com.fasterxml.jackson.databind.node.TextNode; import dev.selimaj.session.types.Method; public class Methods { - public static class Data implements Method { - @Override - public String getName() { - return "data"; - } - - public static String getNameStatic() { - return "data"; + public static class Data extends Method { + Data() { + super("data", TextNode.class, TextNode.class, TextNode.class); } } } diff --git a/src/test/java/dev/selimaj/session/SessionTest.java b/src/test/java/dev/selimaj/session/SessionTest.java index 7b2ae2b..3ac0b76 100644 --- a/src/test/java/dev/selimaj/session/SessionTest.java +++ b/src/test/java/dev/selimaj/session/SessionTest.java @@ -2,15 +2,19 @@ package dev.selimaj.session; import org.junit.jupiter.api.Test; +import com.fasterxml.jackson.databind.node.TextNode; + public class SessionTest { static void testRequest() throws Exception { Session session = Session.connect("ws://localhost:8080/"); - String response = session.request(Methods.Data.getNameStatic(), "Hello from client", String.class).get(); + TextNode response = session.request(Methods.Data.class, TextNode.valueOf("Hello from client")).get(); System.out.println(response); Thread.sleep(1000); + + session.close(); } @Test