Package org.apache.tomcat.websocket
Class WsSession
- java.lang.Object
-
- org.apache.tomcat.websocket.WsSession
-
-
Constructor Summary
Constructors Constructor Description WsSession(Endpoint localEndpoint, WsRemoteEndpointImplBase wsRemoteEndpoint, WsWebSocketContainer wsWebSocketContainer, java.net.URI requestUri, java.util.Map<java.lang.String,java.util.List<java.lang.String>> requestParameterMap, java.lang.String queryString, java.security.Principal userPrincipal, java.lang.String httpSessionId, java.util.List<Extension> negotiatedExtensions, java.lang.String subProtocol, java.util.Map<java.lang.String,java.lang.String> pathParameters, boolean secure, EndpointConfig endpointConfig)
Deprecated.Unused.WsSession(ClientEndpointHolder clientEndpointHolder, WsRemoteEndpointImplBase wsRemoteEndpoint, WsWebSocketContainer wsWebSocketContainer, java.util.List<Extension> negotiatedExtensions, java.lang.String subProtocol, java.util.Map<java.lang.String,java.lang.String> pathParameters, boolean secure, ClientEndpointConfig clientEndpointConfig)
Creates a new WebSocket session for communication between the provided client and remote end points.WsSession(WsRemoteEndpointImplBase wsRemoteEndpoint, WsWebSocketContainer wsWebSocketContainer, java.net.URI requestUri, java.util.Map<java.lang.String,java.util.List<java.lang.String>> requestParameterMap, java.lang.String queryString, java.security.Principal userPrincipal, java.lang.String httpSessionId, java.util.List<Extension> negotiatedExtensions, java.lang.String subProtocol, java.util.Map<java.lang.String,java.lang.String> pathParameters, boolean secure, ServerEndpointConfig serverEndpointConfig)
Creates a new WebSocket session for communication between the provided server and remote end points.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addMessageHandler(MessageHandler listener)
Registers aMessageHandler
for incoming messages.<T> void
addMessageHandler(java.lang.Class<T> clazz, MessageHandler.Partial<T> handler)
Registers aMessageHandler
for partial incoming messages.<T> void
addMessageHandler(java.lang.Class<T> clazz, MessageHandler.Whole<T> handler)
Registers aMessageHandler
for whole incoming messages.protected static void
appendCloseReasonWithTruncation(java.nio.ByteBuffer msg, java.lang.String reason)
Use protected so unit tests can access this method directly.protected void
checkExpiration()
void
close()
Close the connection to the remote end point using the codeCloseReason.CloseCodes.NORMAL_CLOSURE
and an empty reason phrase.void
close(CloseReason closeReason)
Close the connection to the remote end point using the specified code and reason phrase.void
doClose(CloseReason closeReasonMessage, CloseReason closeReasonLocal)
WebSocket 1.0.void
doClose(CloseReason closeReasonMessage, CloseReason closeReasonLocal, boolean closeSocket)
WebSocket 1.0.RemoteEndpoint.Async
getAsyncRemote()
RemoteEndpoint.Basic
getBasicRemote()
protected MessageHandler
getBinaryMessageHandler()
WebSocketContainer
getContainer()
Get the container that created this session.java.lang.String
getHttpSessionId()
java.lang.String
getId()
Provides a unique identifier for the session.InstanceManager
getInstanceManager()
Endpoint
getLocal()
int
getMaxBinaryMessageBufferSize()
Get the current maximum buffer size for binary messages.long
getMaxIdleTimeout()
Get the idle timeout for this session.int
getMaxTextMessageBufferSize()
Get the maximum buffer size for text messages.java.util.Set<MessageHandler>
getMessageHandlers()
java.util.List<Extension>
getNegotiatedExtensions()
java.lang.String
getNegotiatedSubprotocol()
java.util.Set<Session>
getOpenSessions()
Obtain the set of open sessions associated with the same local endpoint as this session.java.util.Map<java.lang.String,java.lang.String>
getPathParameters()
protected MessageHandler.Whole<PongMessage>
getPongMessageHandler()
java.lang.String
getProtocolVersion()
java.lang.String
getQueryString()
java.util.Map<java.lang.String,java.util.List<java.lang.String>>
getRequestParameterMap()
java.net.URI
getRequestURI()
protected MessageHandler
getTextMessageHandler()
java.security.Principal
getUserPrincipal()
java.util.Map<java.lang.String,java.lang.Object>
getUserProperties()
boolean
isOpen()
boolean
isSecure()
void
onClose(CloseReason closeReason)
Called when a close message is received.protected void
registerFuture(org.apache.tomcat.websocket.FutureToSendHandler f2sh)
Make the session aware of aFutureToSendHandler
that will need to be forcibly closed if the session closes before theFutureToSendHandler
completes.void
removeMessageHandler(MessageHandler listener)
void
resume()
Resumes the reading of the incoming messages.void
setMaxBinaryMessageBufferSize(int max)
Set the current maximum buffer size for binary messages.void
setMaxIdleTimeout(long timeout)
Set the idle timeout for this session.void
setMaxTextMessageBufferSize(int max)
Set the maximum buffer size for text messages.void
suspend()
Suspends the reading of the incoming messages.protected void
unregisterFuture(org.apache.tomcat.websocket.FutureToSendHandler f2sh)
Remove aFutureToSendHandler
from the set of tracked instances.protected void
updateLastActiveRead()
protected void
updateLastActiveWrite()
-
-
-
Constructor Detail
-
WsSession
public WsSession(ClientEndpointHolder clientEndpointHolder, WsRemoteEndpointImplBase wsRemoteEndpoint, WsWebSocketContainer wsWebSocketContainer, java.util.List<Extension> negotiatedExtensions, java.lang.String subProtocol, java.util.Map<java.lang.String,java.lang.String> pathParameters, boolean secure, ClientEndpointConfig clientEndpointConfig) throws DeploymentException
Creates a new WebSocket session for communication between the provided client and remote end points. The result ofThread.getContextClassLoader()
at the time this constructor is called will be used when callingEndpoint.onClose(Session, CloseReason)
.- Parameters:
clientEndpointHolder
- The end point managed by this codewsRemoteEndpoint
- The other / remote end pointwsWebSocketContainer
- The container that created this sessionnegotiatedExtensions
- The agreed extensions to use for this sessionsubProtocol
- The agreed sub-protocol to use for this sessionpathParameters
- The path parameters associated with the request that initiated this session ornull
if this is a client sessionsecure
- Was this session initiated over a secure connection?clientEndpointConfig
- The configuration information for the client end point- Throws:
DeploymentException
- if an invalid encode is specified
-
WsSession
public WsSession(WsRemoteEndpointImplBase wsRemoteEndpoint, WsWebSocketContainer wsWebSocketContainer, java.net.URI requestUri, java.util.Map<java.lang.String,java.util.List<java.lang.String>> requestParameterMap, java.lang.String queryString, java.security.Principal userPrincipal, java.lang.String httpSessionId, java.util.List<Extension> negotiatedExtensions, java.lang.String subProtocol, java.util.Map<java.lang.String,java.lang.String> pathParameters, boolean secure, ServerEndpointConfig serverEndpointConfig) throws DeploymentException
Creates a new WebSocket session for communication between the provided server and remote end points. The result ofThread.getContextClassLoader()
at the time this constructor is called will be used when callingEndpoint.onClose(Session, CloseReason)
.- Parameters:
wsRemoteEndpoint
- The other / remote end pointwsWebSocketContainer
- The container that created this sessionrequestUri
- The URI used to connect to this end point ornull
if this is a client sessionrequestParameterMap
- The parameters associated with the request that initiated this session ornull
if this is a client sessionqueryString
- The query string associated with the request that initiated this session ornull
if this is a client sessionuserPrincipal
- The principal associated with the request that initiated this session ornull
if this is a client sessionhttpSessionId
- The HTTP session ID associated with the request that initiated this session ornull
if this is a client sessionnegotiatedExtensions
- The agreed extensions to use for this sessionsubProtocol
- The agreed sub-protocol to use for this sessionpathParameters
- The path parameters associated with the request that initiated this session ornull
if this is a client sessionsecure
- Was this session initiated over a secure connection?serverEndpointConfig
- The configuration information for the server end point- Throws:
DeploymentException
- if an invalid encode is specified
-
WsSession
@Deprecated public WsSession(Endpoint localEndpoint, WsRemoteEndpointImplBase wsRemoteEndpoint, WsWebSocketContainer wsWebSocketContainer, java.net.URI requestUri, java.util.Map<java.lang.String,java.util.List<java.lang.String>> requestParameterMap, java.lang.String queryString, java.security.Principal userPrincipal, java.lang.String httpSessionId, java.util.List<Extension> negotiatedExtensions, java.lang.String subProtocol, java.util.Map<java.lang.String,java.lang.String> pathParameters, boolean secure, EndpointConfig endpointConfig) throws DeploymentException
Deprecated.Unused. This will be removed in Tomcat 10.1Creates a new WebSocket session for communication between the two provided end points. The result ofThread.getContextClassLoader()
at the time this constructor is called will be used when callingEndpoint.onClose(Session, CloseReason)
.- Parameters:
localEndpoint
- The end point managed by this codewsRemoteEndpoint
- The other / remote endpointwsWebSocketContainer
- The container that created this sessionrequestUri
- The URI used to connect to this endpoint ornull
is this is a client sessionrequestParameterMap
- The parameters associated with the request that initiated this session ornull
if this is a client sessionqueryString
- The query string associated with the request that initiated this session ornull
if this is a client sessionuserPrincipal
- The principal associated with the request that initiated this session ornull
if this is a client sessionhttpSessionId
- The HTTP session ID associated with the request that initiated this session ornull
if this is a client sessionnegotiatedExtensions
- The agreed extensions to use for this sessionsubProtocol
- The agreed subprotocol to use for this sessionpathParameters
- The path parameters associated with the request that initiated this session ornull
if this is a client sessionsecure
- Was this session initiated over a secure connection?endpointConfig
- The configuration information for the endpoint- Throws:
DeploymentException
- if an invalid encode is specified
-
-
Method Detail
-
getInstanceManager
public InstanceManager getInstanceManager()
-
getContainer
public WebSocketContainer getContainer()
Description copied from interface:jakarta.websocket.Session
Get the container that created this session.- Specified by:
getContainer
in interfaceSession
- Returns:
- the container that created this session.
-
addMessageHandler
public void addMessageHandler(MessageHandler listener)
Description copied from interface:jakarta.websocket.Session
Registers aMessageHandler
for incoming messages. Only oneMessageHandler
may be registered for each message type (text, binary, pong). The message type will be derived at runtime from the providedMessageHandler
instance. It is not always possible to do this so it is better to useSession.addMessageHandler(Class, jakarta.websocket.MessageHandler.Partial)
orSession.addMessageHandler(Class, jakarta.websocket.MessageHandler.Whole)
.- Specified by:
addMessageHandler
in interfaceSession
- Parameters:
listener
- The message handler for a incoming message
-
addMessageHandler
public <T> void addMessageHandler(java.lang.Class<T> clazz, MessageHandler.Partial<T> handler) throws java.lang.IllegalStateException
Description copied from interface:jakarta.websocket.Session
Registers aMessageHandler
for partial incoming messages. Only oneMessageHandler
may be registered for each message type (text or binary, pong messages are never presented as partial messages).- Specified by:
addMessageHandler
in interfaceSession
- Type Parameters:
T
- The type of message that the given handler is intended for- Parameters:
clazz
- The Class that implements Thandler
- The message handler for a incoming message- Throws:
java.lang.IllegalStateException
- If a message handler has already been registered for the associated message type
-
addMessageHandler
public <T> void addMessageHandler(java.lang.Class<T> clazz, MessageHandler.Whole<T> handler) throws java.lang.IllegalStateException
Description copied from interface:jakarta.websocket.Session
Registers aMessageHandler
for whole incoming messages. Only oneMessageHandler
may be registered for each message type (text, binary, pong).- Specified by:
addMessageHandler
in interfaceSession
- Type Parameters:
T
- The type of message that the given handler is intended for- Parameters:
clazz
- The Class that implements Thandler
- The message handler for a incoming message- Throws:
java.lang.IllegalStateException
- If a message handler has already been registered for the associated message type
-
getMessageHandlers
public java.util.Set<MessageHandler> getMessageHandlers()
- Specified by:
getMessageHandlers
in interfaceSession
-
removeMessageHandler
public void removeMessageHandler(MessageHandler listener)
- Specified by:
removeMessageHandler
in interfaceSession
-
getProtocolVersion
public java.lang.String getProtocolVersion()
- Specified by:
getProtocolVersion
in interfaceSession
-
getNegotiatedSubprotocol
public java.lang.String getNegotiatedSubprotocol()
- Specified by:
getNegotiatedSubprotocol
in interfaceSession
-
getNegotiatedExtensions
public java.util.List<Extension> getNegotiatedExtensions()
- Specified by:
getNegotiatedExtensions
in interfaceSession
-
getMaxIdleTimeout
public long getMaxIdleTimeout()
Description copied from interface:jakarta.websocket.Session
Get the idle timeout for this session.- Specified by:
getMaxIdleTimeout
in interfaceSession
- Returns:
- The current idle timeout for this session in milliseconds. Zero or negative values indicate an infinite timeout.
-
setMaxIdleTimeout
public void setMaxIdleTimeout(long timeout)
Description copied from interface:jakarta.websocket.Session
Set the idle timeout for this session.- Specified by:
setMaxIdleTimeout
in interfaceSession
- Parameters:
timeout
- The new idle timeout for this session in milliseconds. Zero or negative values indicate an infinite timeout.
-
setMaxBinaryMessageBufferSize
public void setMaxBinaryMessageBufferSize(int max)
Description copied from interface:jakarta.websocket.Session
Set the current maximum buffer size for binary messages.- Specified by:
setMaxBinaryMessageBufferSize
in interfaceSession
- Parameters:
max
- The new maximum buffer size in bytes
-
getMaxBinaryMessageBufferSize
public int getMaxBinaryMessageBufferSize()
Description copied from interface:jakarta.websocket.Session
Get the current maximum buffer size for binary messages.- Specified by:
getMaxBinaryMessageBufferSize
in interfaceSession
- Returns:
- The current maximum buffer size in bytes
-
setMaxTextMessageBufferSize
public void setMaxTextMessageBufferSize(int max)
Description copied from interface:jakarta.websocket.Session
Set the maximum buffer size for text messages.- Specified by:
setMaxTextMessageBufferSize
in interfaceSession
- Parameters:
max
- The new maximum buffer size in characters.
-
getMaxTextMessageBufferSize
public int getMaxTextMessageBufferSize()
Description copied from interface:jakarta.websocket.Session
Get the maximum buffer size for text messages.- Specified by:
getMaxTextMessageBufferSize
in interfaceSession
- Returns:
- The maximum buffer size in characters.
-
getOpenSessions
public java.util.Set<Session> getOpenSessions()
Description copied from interface:jakarta.websocket.Session
Obtain the set of open sessions associated with the same local endpoint as this session.- Specified by:
getOpenSessions
in interfaceSession
- Returns:
- The set of currently open sessions for the local endpoint that this session is associated with.
-
getAsyncRemote
public RemoteEndpoint.Async getAsyncRemote()
- Specified by:
getAsyncRemote
in interfaceSession
-
getBasicRemote
public RemoteEndpoint.Basic getBasicRemote()
- Specified by:
getBasicRemote
in interfaceSession
-
close
public void close() throws java.io.IOException
Description copied from interface:jakarta.websocket.Session
Close the connection to the remote end point using the codeCloseReason.CloseCodes.NORMAL_CLOSURE
and an empty reason phrase.
-
close
public void close(CloseReason closeReason) throws java.io.IOException
Description copied from interface:jakarta.websocket.Session
Close the connection to the remote end point using the specified code and reason phrase.
-
doClose
public void doClose(CloseReason closeReasonMessage, CloseReason closeReasonLocal)
WebSocket 1.0. Section 2.1.5. Need internal close method as spec requires that the local endpoint receives a 1006 on timeout.- Parameters:
closeReasonMessage
- The close reason to pass to the remote endpointcloseReasonLocal
- The close reason to pass to the local endpoint
-
doClose
public void doClose(CloseReason closeReasonMessage, CloseReason closeReasonLocal, boolean closeSocket)
WebSocket 1.0. Section 2.1.5. Need internal close method as spec requires that the local endpoint receives a 1006 on timeout.- Parameters:
closeReasonMessage
- The close reason to pass to the remote endpointcloseReasonLocal
- The close reason to pass to the local endpointcloseSocket
- Should the socket be closed immediately rather than waiting for the server to respond
-
onClose
public void onClose(CloseReason closeReason)
Called when a close message is received. Should only ever happen once. Also called after a protocol error when the ProtocolHandler needs to force the closing of the connection.- Parameters:
closeReason
- The reason contained within the received close message.
-
appendCloseReasonWithTruncation
protected static void appendCloseReasonWithTruncation(java.nio.ByteBuffer msg, java.lang.String reason)
Use protected so unit tests can access this method directly.- Parameters:
msg
- The messagereason
- The reason
-
registerFuture
protected void registerFuture(org.apache.tomcat.websocket.FutureToSendHandler f2sh)
Make the session aware of aFutureToSendHandler
that will need to be forcibly closed if the session closes before theFutureToSendHandler
completes.- Parameters:
f2sh
- The handler
-
unregisterFuture
protected void unregisterFuture(org.apache.tomcat.websocket.FutureToSendHandler f2sh)
Remove aFutureToSendHandler
from the set of tracked instances.- Parameters:
f2sh
- The handler
-
getRequestURI
public java.net.URI getRequestURI()
- Specified by:
getRequestURI
in interfaceSession
-
getRequestParameterMap
public java.util.Map<java.lang.String,java.util.List<java.lang.String>> getRequestParameterMap()
- Specified by:
getRequestParameterMap
in interfaceSession
-
getQueryString
public java.lang.String getQueryString()
- Specified by:
getQueryString
in interfaceSession
-
getUserPrincipal
public java.security.Principal getUserPrincipal()
- Specified by:
getUserPrincipal
in interfaceSession
-
getPathParameters
public java.util.Map<java.lang.String,java.lang.String> getPathParameters()
- Specified by:
getPathParameters
in interfaceSession
-
getId
public java.lang.String getId()
Description copied from interface:jakarta.websocket.Session
Provides a unique identifier for the session. This identifier should not be relied upon to be generated from a secure random source.
-
getUserProperties
public java.util.Map<java.lang.String,java.lang.Object> getUserProperties()
- Specified by:
getUserProperties
in interfaceSession
-
getLocal
public Endpoint getLocal()
-
getHttpSessionId
public java.lang.String getHttpSessionId()
-
getTextMessageHandler
protected MessageHandler getTextMessageHandler()
-
getBinaryMessageHandler
protected MessageHandler getBinaryMessageHandler()
-
getPongMessageHandler
protected MessageHandler.Whole<PongMessage> getPongMessageHandler()
-
updateLastActiveRead
protected void updateLastActiveRead()
-
updateLastActiveWrite
protected void updateLastActiveWrite()
-
checkExpiration
protected void checkExpiration()
-
suspend
public void suspend()
Suspends the reading of the incoming messages.
-
resume
public void resume()
Resumes the reading of the incoming messages.
-
-