Class AbstractListenerWebSocketSession<T>
- Type Parameters:
T
- the native delegate type
- All Implemented Interfaces:
Subscriber<Void>
,WebSocketSession
- Direct Known Subclasses:
JettyWebSocketSession
,StandardWebSocketSession
,UndertowWebSocketSession
WebSocketSession
implementations that bridge between
event-listener WebSocket APIs (e.g. Jakarta WebSocket API (JSR-356), Jetty,
Undertow) and Reactive Streams.
Also implements Subscriber<Void>
so it can be used to subscribe to
the completion of WebSocketHandler.handle(WebSocketSession)
.
- Since:
- 5.0
- Author:
- Violeta Georgieva, Rossen Stoyanchev
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected final class
Processor to send web socket messages. -
Field Summary
Fields inherited from class org.springframework.web.reactive.socket.adapter.AbstractWebSocketSession
logger
-
Constructor Summary
ConstructorDescriptionAbstractListenerWebSocketSession
(T delegate, String id, HandshakeInfo info, DataBufferFactory bufferFactory) Base constructor.AbstractListenerWebSocketSession
(T delegate, String id, HandshakeInfo info, DataBufferFactory bufferFactory, reactor.core.publisher.Sinks.Empty<Void> handlerCompletionSink) Alternative constructor with completion sink to use to signal when the handling of the session is complete, with success or error. -
Method Summary
Modifier and TypeMethodDescriptionprotected abstract boolean
Whether the underlying WebSocket API has flow control and can suspend and resume the receiving of messages.reactor.core.publisher.Mono<CloseStatus>
Provides access to theCloseStatus
with which the session is closed either locally or remotely, or completes empty if the session ended without a status.void
void
void
void
onSubscribe
(Subscription subscription) reactor.core.publisher.Flux<WebSocketMessage>
receive()
Provides access to the stream of inbound messages.protected abstract void
Resume receiving new message(s) after demand is generated by the downstream Subscriber.reactor.core.publisher.Mono<Void>
send
(Publisher<WebSocketMessage> messages) Give a source of outgoing messages, write the messages and return aMono<Void>
that completes when the source completes and writing is done.protected abstract boolean
sendMessage
(WebSocketMessage message) Send the given WebSocket message.protected abstract void
Suspend receiving until received message(s) are processed and more demand is generated by the downstream Subscriber.Methods inherited from class org.springframework.web.reactive.socket.adapter.AbstractWebSocketSession
binaryMessage, bufferFactory, getAttributes, getDelegate, getHandshakeInfo, getId, getLogPrefix, pingMessage, pongMessage, textMessage, toString
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.springframework.web.reactive.socket.WebSocketSession
close, close, isOpen
-
Constructor Details
-
AbstractListenerWebSocketSession
public AbstractListenerWebSocketSession(T delegate, String id, HandshakeInfo info, DataBufferFactory bufferFactory) Base constructor.- Parameters:
delegate
- the native WebSocket session, channel, or connectionid
- the session idinfo
- the handshake infobufferFactory
- the DataBuffer factor for the current connection
-
AbstractListenerWebSocketSession
public AbstractListenerWebSocketSession(T delegate, String id, HandshakeInfo info, DataBufferFactory bufferFactory, @Nullable reactor.core.publisher.Sinks.Empty<Void> handlerCompletionSink) Alternative constructor with completion sink to use to signal when the handling of the session is complete, with success or error.Primarily for use with
WebSocketClient
to be able to communicate the end of handling.
-
-
Method Details
-
getSendProcessor
-
receive
Description copied from interface:WebSocketSession
Provides access to the stream of inbound messages.This stream receives a completion or error signal when the connection is closed. In a typical
WebSocketHandler
implementation this stream is composed into the overall processing flow, so that when the connection is closed, handling will end.See the class-level doc of
WebSocketHandler
and the reference for more details and examples of how to handle the session.- Specified by:
receive
in interfaceWebSocketSession
- Specified by:
receive
in classAbstractWebSocketSession<T>
-
send
Description copied from interface:WebSocketSession
Give a source of outgoing messages, write the messages and return aMono<Void>
that completes when the source completes and writing is done.See the class-level doc of
WebSocketHandler
and the reference for more details and examples of how to handle the session.- Specified by:
send
in interfaceWebSocketSession
- Specified by:
send
in classAbstractWebSocketSession<T>
-
closeStatus
Description copied from interface:WebSocketSession
Provides access to theCloseStatus
with which the session is closed either locally or remotely, or completes empty if the session ended without a status.- Specified by:
closeStatus
in interfaceWebSocketSession
-
canSuspendReceiving
protected abstract boolean canSuspendReceiving()Whether the underlying WebSocket API has flow control and can suspend and resume the receiving of messages.Note: Sub-classes are encouraged to start out in suspended mode, if possible, and wait until demand is received.
-
suspendReceiving
protected abstract void suspendReceiving()Suspend receiving until received message(s) are processed and more demand is generated by the downstream Subscriber.Note: if the underlying WebSocket API does not provide flow control for receiving messages, this method should be a no-op and
canSuspendReceiving()
should returnfalse
. -
resumeReceiving
protected abstract void resumeReceiving()Resume receiving new message(s) after demand is generated by the downstream Subscriber.Note: if the underlying WebSocket API does not provide flow control for receiving messages, this method should be a no-op and
canSuspendReceiving()
should returnfalse
. -
sendMessage
Send the given WebSocket message.Note: Sub-classes are responsible for releasing the payload data buffer, once fully written, if pooled buffers apply to the underlying container.
- Throws:
IOException
-
onSubscribe
- Specified by:
onSubscribe
in interfaceSubscriber<T>
-
onNext
- Specified by:
onNext
in interfaceSubscriber<T>
-
onError
- Specified by:
onError
in interfaceSubscriber<T>
-
onComplete
public void onComplete()- Specified by:
onComplete
in interfaceSubscriber<T>
-