public class DefaultStompSession extends java.lang.Object implements ConnectionHandlingStompSession
ConnectionHandlingStompSession
.Modifier and Type | Class and Description |
---|---|
private class |
DefaultStompSession.DefaultSubscription |
private class |
DefaultStompSession.ReadInactivityTask |
private class |
DefaultStompSession.ReceiptHandler |
private class |
DefaultStompSession.WriteInactivityTask |
StompSession.Receiptable, StompSession.Subscription
Modifier and Type | Field and Description |
---|---|
private boolean |
autoReceiptEnabled |
private boolean |
closing |
private StompHeaders |
connectHeaders |
private TcpConnection<byte[]> |
connection |
private MessageConverter |
converter |
static byte[] |
EMPTY_PAYLOAD |
private static Message<byte[]> |
HEARTBEAT |
private static long |
HEARTBEAT_MULTIPLIER |
private static IdGenerator |
idGenerator |
private static Log |
logger |
private java.util.Map<java.lang.String,DefaultStompSession.ReceiptHandler> |
receiptHandlers |
private java.util.concurrent.atomic.AtomicInteger |
receiptIndex |
private long |
receiptTimeLimit |
private SettableListenableFuture<StompSession> |
sessionFuture |
private StompSessionHandler |
sessionHandler |
private java.lang.String |
sessionId |
private java.util.concurrent.atomic.AtomicInteger |
subscriptionIndex |
private java.util.Map<java.lang.String,DefaultStompSession.DefaultSubscription> |
subscriptions |
private TaskScheduler |
taskScheduler |
Constructor and Description |
---|
DefaultStompSession(StompSessionHandler sessionHandler,
StompHeaders connectHeaders)
Create a new session.
|
Modifier and Type | Method and Description |
---|---|
void |
afterConnected(TcpConnection<byte[]> connection)
Invoked after a connection is successfully established.
|
void |
afterConnectFailure(java.lang.Throwable ex)
Invoked on failure to connect.
|
void |
afterConnectionClosed()
Invoked after the connection is closed.
|
private java.lang.String |
checkOrAddReceipt(StompHeaders stompHeaders) |
private StompHeaderAccessor |
createHeaderAccessor(StompCommand command) |
private Message<byte[]> |
createMessage(StompHeaderAccessor accessor,
java.lang.Object payload) |
void |
disconnect()
Disconnect the session by sending a DISCONNECT frame.
|
private void |
execute(Message<byte[]> message) |
MessageConverter |
getMessageConverter()
Return the configured
MessageConverter . |
long |
getReceiptTimeLimit()
Return the configured time limit before a receipt expires.
|
ListenableFuture<StompSession> |
getSessionFuture()
Return a future that will complete when the session is ready for use.
|
StompSessionHandler |
getSessionHandler()
Return the configured session handler.
|
java.lang.String |
getSessionId()
Return the id for the session.
|
TaskScheduler |
getTaskScheduler()
Return the configured TaskScheduler to use for receipt tracking.
|
void |
handleFailure(java.lang.Throwable ex)
Handle a failure on the connection.
|
void |
handleMessage(Message<byte[]> message)
Handle a message received from the remote host.
|
private void |
initHeartbeatTasks(StompHeaders connectedHeaders) |
private void |
invokeHandler(StompFrameHandler handler,
Message<byte[]> message,
StompHeaders stompHeaders) |
boolean |
isAutoReceiptEnabled()
Whether receipt headers should be automatically added.
|
boolean |
isConnected()
Whether the session is connected.
|
private void |
resetConnection() |
StompSession.Receiptable |
send(StompHeaders stompHeaders,
java.lang.Object payload)
An overloaded version of
StompSession.send(String, Object) that accepts
full StompHeaders instead of a destination. |
StompSession.Receiptable |
send(java.lang.String destination,
java.lang.Object payload)
Send a message to the specified destination, converting the payload to a
byte[] with the help of a
MessageConverter . |
void |
setAutoReceipt(boolean autoReceiptEnabled)
When enabled, a receipt header is automatically added to future
send and subscribe operations on this session, which causes
the server to return a RECEIPT. |
void |
setMessageConverter(MessageConverter messageConverter)
Set the
MessageConverter to use to convert the payload of incoming
and outgoing messages to and from byte[] based on object type, or
expected object type, and the "content-type" header. |
void |
setReceiptTimeLimit(long receiptTimeLimit)
Configure the time in milliseconds before a receipt expires.
|
void |
setTaskScheduler(TaskScheduler taskScheduler)
Configure the TaskScheduler to use for receipt tracking.
|
StompSession.Subscription |
subscribe(StompHeaders stompHeaders,
StompFrameHandler handler)
An overloaded version of
StompSession.subscribe(String, StompFrameHandler)
that accepts full StompHeaders rather instead of a destination. |
StompSession.Subscription |
subscribe(java.lang.String destination,
StompFrameHandler handler)
Subscribe to the given destination by sending a SUBSCRIBE frame and handle
received messages with the specified
StompFrameHandler . |
private void |
unsubscribe(java.lang.String id) |
private static final Log logger
private static final IdGenerator idGenerator
public static final byte[] EMPTY_PAYLOAD
private static final long HEARTBEAT_MULTIPLIER
private static final Message<byte[]> HEARTBEAT
private final java.lang.String sessionId
private final StompSessionHandler sessionHandler
private final StompHeaders connectHeaders
private final SettableListenableFuture<StompSession> sessionFuture
private MessageConverter converter
private TaskScheduler taskScheduler
private long receiptTimeLimit
private volatile boolean autoReceiptEnabled
private volatile TcpConnection<byte[]> connection
private final java.util.concurrent.atomic.AtomicInteger subscriptionIndex
private final java.util.Map<java.lang.String,DefaultStompSession.DefaultSubscription> subscriptions
private final java.util.concurrent.atomic.AtomicInteger receiptIndex
private final java.util.Map<java.lang.String,DefaultStompSession.ReceiptHandler> receiptHandlers
private volatile boolean closing
public DefaultStompSession(StompSessionHandler sessionHandler, StompHeaders connectHeaders)
sessionHandler
- the application handler for the sessionconnectHeaders
- headers for the STOMP CONNECT framepublic java.lang.String getSessionId()
StompSession
getSessionId
in interface StompSession
public StompSessionHandler getSessionHandler()
public ListenableFuture<StompSession> getSessionFuture()
ConnectionHandlingStompSession
getSessionFuture
in interface ConnectionHandlingStompSession
public void setMessageConverter(MessageConverter messageConverter)
MessageConverter
to use to convert the payload of incoming
and outgoing messages to and from byte[]
based on object type, or
expected object type, and the "content-type" header.
By default, SimpleMessageConverter
is configured.
messageConverter
- the message converter to usepublic MessageConverter getMessageConverter()
MessageConverter
.public void setTaskScheduler(TaskScheduler taskScheduler)
public TaskScheduler getTaskScheduler()
public void setReceiptTimeLimit(long receiptTimeLimit)
By default set to 15,000 (15 seconds).
public long getReceiptTimeLimit()
public void setAutoReceipt(boolean autoReceiptEnabled)
StompSession
send
and subscribe
operations on this session, which causes
the server to return a RECEIPT. An application can then use the
Receiptable
returned from the operation to track the receipt.
A receipt header can also be added manually through the overloaded
methods that accept StompHeaders
.
setAutoReceipt
in interface StompSession
public boolean isAutoReceiptEnabled()
public boolean isConnected()
StompSession
isConnected
in interface StompSession
public StompSession.Receiptable send(java.lang.String destination, java.lang.Object payload)
StompSession
byte[]
with the help of a
MessageConverter
.send
in interface StompSession
destination
- the destination to send a message topayload
- the message payloadpublic StompSession.Receiptable send(StompHeaders stompHeaders, java.lang.Object payload)
StompSession
StompSession.send(String, Object)
that accepts
full StompHeaders
instead of a destination. The headers must
contain a destination and may also have other headers such as
"content-type" or custom headers for the broker to propagate to subscribers,
or broker-specific, non-standard headers..send
in interface StompSession
stompHeaders
- the message headerspayload
- the message payloadprivate java.lang.String checkOrAddReceipt(StompHeaders stompHeaders)
private StompHeaderAccessor createHeaderAccessor(StompCommand command)
private Message<byte[]> createMessage(StompHeaderAccessor accessor, java.lang.Object payload)
private void execute(Message<byte[]> message)
public StompSession.Subscription subscribe(java.lang.String destination, StompFrameHandler handler)
StompSession
StompFrameHandler
.subscribe
in interface StompSession
destination
- the destination to subscribe tohandler
- the handler for received messagespublic StompSession.Subscription subscribe(StompHeaders stompHeaders, StompFrameHandler handler)
StompSession
StompSession.subscribe(String, StompFrameHandler)
that accepts full StompHeaders
rather instead of a destination.subscribe
in interface StompSession
stompHeaders
- the headers for the subscribe message framehandler
- the handler for received messagesprivate void unsubscribe(java.lang.String id)
public void disconnect()
StompSession
disconnect
in interface StompSession
public void afterConnected(TcpConnection<byte[]> connection)
TcpConnectionHandler
afterConnected
in interface TcpConnectionHandler<byte[]>
connection
- the connectionpublic void afterConnectFailure(java.lang.Throwable ex)
TcpConnectionHandler
afterConnectFailure
in interface TcpConnectionHandler<byte[]>
ex
- the exceptionpublic void handleMessage(Message<byte[]> message)
TcpConnectionHandler
handleMessage
in interface TcpConnectionHandler<byte[]>
message
- the messageprivate void invokeHandler(StompFrameHandler handler, Message<byte[]> message, StompHeaders stompHeaders)
private void initHeartbeatTasks(StompHeaders connectedHeaders)
public void handleFailure(java.lang.Throwable ex)
TcpConnectionHandler
handleFailure
in interface TcpConnectionHandler<byte[]>
ex
- the exceptionpublic void afterConnectionClosed()
TcpConnectionHandler
afterConnectionClosed
in interface TcpConnectionHandler<byte[]>
private void resetConnection()