Request handling

This commit is contained in:
2026-02-19 18:08:33 +01:00
parent 7851e0d08a
commit fb66ed08e1
5 changed files with 28 additions and 15 deletions
@@ -1,9 +1,12 @@
package dev.selimaj.session;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.node.TextNode;
import dev.selimaj.session.types.SessionResult;
import dev.selimaj.session.types.Message;
import dev.selimaj.session.types.Method;
import dev.selimaj.session.types.MethodHandler;
import java.net.URI;
import java.net.http.HttpClient;
@@ -52,6 +55,19 @@ public final class Session {
return listener.request(ws, method.getName(), req, method.getResClass());
}
<Req extends JsonNode, Res extends JsonNode, Err extends JsonNode> void onRequest(Method<Req, Res, Err> method,
MethodHandler<Req> handler) {
MethodHandler<JsonNode> wrapper = (id, value) -> {
try {
return handler.handle(id, listener.mapper.treeToValue(value, method.getReqClass()));
} catch (Exception e) {
return SessionResult.error(TextNode.valueOf(e.getMessage()));
}
};
this.listener.methods.put(method.getName(), wrapper);
}
public void close() throws Exception {
ws.sendClose(0, "Session closed");
}