1package dev.rafex.ether.websocket.jetty12;
29import java.nio.ByteBuffer;
34import org.eclipse.jetty.websocket.api.Callback;
35import org.eclipse.jetty.websocket.api.Session;
37import dev.rafex.ether.websocket.core.WebSocketCloseStatus;
38import dev.rafex.ether.websocket.core.WebSocketEndpoint;
49 private final String path;
50 private final Map<String, String> pathParams;
51 private final Map<String, List<String>> queryParams;
52 private final Map<String, List<String>> headers;
65 final Map<String, String> pathParams,
final Map<String, List<String>> queryParams,
66 final Map<String, List<String>> headers) {
67 this.endpoint = endpoint;
69 this.pathParams = pathParams;
70 this.queryParams = queryParams;
71 this.headers = headers;
77 this.session.attribute(
"requestId", resolveRequestId(headers));
79 endpoint.onOpen(this.session);
80 }
catch (
final Exception e) {
88 endpoint.onText(session, message);
89 }
catch (
final Exception e) {
97 endpoint.onBinary(session, payload ==
null ? ByteBuffer.allocate(0) : payload.slice());
99 }
catch (
final Exception e) {
112 "unsupported:text_fragmentation", Callback.NOOP);
121 callback.fail(
new UnsupportedOperationException(
"unsupported: binary fragmentation"));
122 handleFailure(
new UnsupportedOperationException(
"unsupported: binary fragmentation"));
126 public void onWebSocketClose(
final int statusCode,
final String reason,
final Callback callback) {
127 if (session ==
null) {
132 endpoint.onClose(session, WebSocketCloseStatus.of(statusCode, reason));
134 }
catch (
final Exception e) {
135 endpoint.onError(session, e);
140 private void handleFailure(
final Exception error) {
141 endpoint.
onError(session, error);
142 if (session !=
null && session.
isOpen()) {
143 session.
close(WebSocketCloseStatus.SERVER_ERROR);
147 private static String resolveRequestId(
final Map<String, List<String>> headers) {
148 final var values = headers.get(
"x-request-id");
149 if (values !=
null && !values.isEmpty() && values.get(0) !=
null && !values.get(0).isBlank()) {
150 return values.get(0);
152 return UUID.randomUUID().toString();
157 if (session ==
null) {
160 endpoint.onError(session, cause);
void onWebSocketBinary(final ByteBuffer payload, final Callback callback)
void onWebSocketClose(final int statusCode, final String reason, final Callback callback)
void onWebSocketPartialText(final String payload, final boolean fin)
void onWebSocketError(final Throwable cause)
void onWebSocketPartialBinary(final ByteBuffer payload, final boolean fin, final Callback callback)
JettyWebSocketEndpointAdapter(final WebSocketEndpoint endpoint, final String path, final Map< String, String > pathParams, final Map< String, List< String > > queryParams, final Map< String, List< String > > headers)
Crea un adaptador para el endpoint dado.
void onWebSocketOpen(final Session session)
void onWebSocketText(final String message)
Jetty 12 implementation of WebSocketSession.
boolean isOpen()
Returns whether the underlying session is still open.
CompletionStage< Void > close(final WebSocketCloseStatus status)
Closes the session with the given status code and reason.
Define el contrato de un punto final WebSocket.
default void onError(final WebSocketSession session, final Throwable error)
Invocado cuando ocurre un error en la conexión WebSocket.