/** * Jooby https://jooby.io * Apache License Version 2.0 https://jooby.io/LICENSE.txt * Copyright 2014 Edgar Espina */ package io.jooby; import javax.annotation.Nonnull; import java.util.List; import java.util.Map; /** * Websocket. Usage: * *
{@code
*
* ws("/pattern", (ctx, configurer) -> {
* configurer.onConnect(ws -> {
* // Connect callback
* }):
*
* configurer.onMessage((ws, message) -> {
* ws.send("Got: " + message.value());
* });
*
* configurer.onClose((ws, closeStatus) -> {
* // Closing websocket
* });
*
* configurer.onError((ws, cause) -> {
*
* });
* });
*
* }
*
* NOTE: Websocket API ONLY handles text messages (not binary message).
*
* @author edgar
* @since 2.2.0
*/
public interface WebSocket {
/**
* Websocket initializer. Give you access to a read-only {@link Context} you are free to access
* to request attributes, while attempt to modify a response results in exception.
*/
interface Initializer {
/**
* Callback with a readonly context and websocket configurer.
*
* @param ctx Readonly context.
* @param configurer WebSocket configurer.
*/
void init(@Nonnull Context ctx, @Nonnull WebSocketConfigurer configurer);
}
/**
* On connect callback.
*/
interface OnConnect {
/**
* On connect callback with recently created web socket.
*
* @param ws WebSocket.
*/
void onConnect(@Nonnull WebSocket ws);
}
/**
* On message callback. When a Message is send by a client, this callback allow you to
* handle/react to it.
*/
interface OnMessage {
/**
* Generated when a client send a message.
*
* @param ws WebSocket.
* @param message Client message.
*/
void onMessage(@Nonnull WebSocket ws, @Nonnull WebSocketMessage message);
}
/**
* On close callback. Generated when client close the connection or when explicit calls to
* {@link #close(WebSocketCloseStatus)}.
*/
interface OnClose {
/**
* Generated when client close the connection or when explicit calls to
* {@link #close(WebSocketCloseStatus)}.
*
* @param ws WebSocket.
* @param closeStatus Close status.
*/
void onClose(@Nonnull WebSocket ws, @Nonnull WebSocketCloseStatus closeStatus);
}
/**
* On error callback. Generated when unexpected error occurs.
*/
interface OnError {
/**
* Error callback, let you listen for exception. Websocket might or might not be open.
*
* @param ws Websocket.
* @param cause Cause.
*/
void onError(@Nonnull WebSocket ws, @Nonnull Throwable cause);
}
/** Max message size for websocket (128K). */
int MAX_BUFFER_SIZE = 131072;
/**
* Originating HTTP context. Please note this is a read-only context, so you are not allowed
* to modify or produces a response from it.
*
* The context let give you access to originating request (then one that was upgrade it).
*
* @return Read-only originating HTTP request.
*/
@Nonnull Context getContext();
/**
* Context attributes (a.k.a request attributes).
*
* @return Context attributes.
*/
default @Nonnull Map