Class ServerSessionImpl
- All Implemented Interfaces:
ServerSession
,Session
,org.eclipse.jetty.util.component.Dumpable
-
Nested Class Summary
Nested classes/interfaces inherited from interface org.eclipse.jetty.util.component.Dumpable
org.eclipse.jetty.util.component.Dumpable.DumpableContainer
Nested classes/interfaces inherited from interface org.cometd.bayeux.server.ServerSession
ServerSession.AddedListener, ServerSession.DeQueueListener, ServerSession.Extension, ServerSession.HeartBeatListener, ServerSession.MessageListener, ServerSession.QueueListener, ServerSession.QueueMaxedListener, ServerSession.RemovedListener, ServerSession.ServerSessionListener
-
Field Summary
Fields inherited from interface org.eclipse.jetty.util.component.Dumpable
KEY
-
Constructor Summary
ConstructorDescriptionServerSessionImpl
(BayeuxServerImpl bayeux) ServerSessionImpl
(BayeuxServerImpl bayeux, LocalSessionImpl localSession, String idHint) -
Method Summary
Modifier and TypeMethodDescriptionvoid
addExtension
(ServerSession.Extension extension) Adds the given extension to this session.void
Adds the given listener to this session.protected void
addMessage
(ServerMessage message) void
Executes the given command in a batch so that any Bayeux message sent by the command (via the Bayeux API) is queued up until the end of the command and then all messages are sent at once.long
calculateInterval
(long defaultInterval) long
calculateTimeout
(long defaultTimeout) void
cancelExpiration
(boolean metaConnect) boolean
void
Delivers the given information to this session.void
deliver
(Session sender, ServerMessage.Mutable message, Promise<Boolean> promise) Delivers the given message to this session.protected void
deliver1
(ServerSession sender, ServerMessage.Mutable mutable, Promise<Boolean> promise) void
void
Disconnects this session, ending the link between the client and the server peers.void
dump
(Appendable out, String indent) boolean
endBatch()
Ends a batch started withSession.startBatch()
.protected void
extendIncoming
(ServerMessage.Mutable message, Promise<Boolean> promise) protected void
extendOutgoing
(ServerSession sender, ServerMessage.Mutable message, Promise<ServerMessage.Mutable> promise) void
flush()
getAttribute
(String name) Retrieves the value of named session attribute.getId()
The clientId of the session.long
long
getLock()
long
long
getQueue()
long
boolean
handshake
(ServerMessage.Mutable message) boolean
boolean
boolean
boolean
A connected session is a session where the link between the client and the server has been established.boolean
boolean
A handshook session is a session where the handshake has successfully completedboolean
boolean
boolean
void
notifyResumed
(ServerMessage message, boolean timeout) void
notifySuspended
(ServerMessage message, long timeout) void
reAdvise()
removeAttribute
(String name) Removes a named session attribute.protected boolean
removed
(ServerMessage message, boolean timeout) void
removeExtension
(ServerSession.Extension extension) Removes the given extension from this session.void
Removes the given listener from this session.void
scheduleExpiration
(long defaultInterval, long defaultMaxInterval, long metaConnectCycle) void
setAllowMessageDeliveryDuringHandshake
(boolean allow) void
setAttribute
(String name, Object value) Sets a named session attribute value.void
setBroadcastToPublisher
(boolean value) Sets whether this session sends messages back to itself.void
setBrowserId
(String browserId) Sets a remote client identifier, typically a browser.void
setInterval
(long intervalMS) void
setMaxInterval
(long maxInterval) void
setMetaConnectDeliveryOnly
(boolean meta) Sets whether delivery of messages only happen via the/meta/connect
channel.void
setScheduler
(AbstractServerTransport.Scheduler newScheduler) void
setServerTransport
(ServerTransport transport) void
setTimeout
(long timeoutMS) void
setUserAgent
(String userAgent) boolean
void
Starts a batch, to be ended withSession.endBatch()
.protected boolean
subscribe
(ServerChannelImpl channel) protected boolean
sweep
(long now) takeAdvice
(ServerTransport transport) takeQueue
(List<ServerMessage.Mutable> replies) toString()
protected void
unsubscribedFrom
(ServerChannelImpl channel) boolean
updateServerEndPoint
(Object newEndPoint) void
updateTransientInterval
(long interval) Updates the transient interval with the given value.void
updateTransientTimeout
(long timeout) Updates the transient timeout with the given value.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.eclipse.jetty.util.component.Dumpable
dump, dumpSelf
-
Constructor Details
-
ServerSessionImpl
-
ServerSessionImpl
-
-
Method Details
-
getBayeuxServer
-
getUserAgent
- Specified by:
getUserAgent
in interfaceServerSession
- Returns:
- the remote user agent
-
setUserAgent
- Parameters:
userAgent
- the remote user agent
-
getBrowserId
- Returns:
- the remote client identifier
-
setBrowserId
Sets a remote client identifier, typically a browser.
- Parameters:
browserId
- the remote client identifier
-
sweep
protected boolean sweep(long now) -
getSubscriptions
- Specified by:
getSubscriptions
in interfaceServerSession
- Returns:
- the set of channels to which this session is subscribed to
-
addExtension
Description copied from interface:ServerSession
Adds the given extension to this session.
- Specified by:
addExtension
in interfaceServerSession
- Parameters:
extension
- the extension to add- See Also:
-
removeExtension
Description copied from interface:ServerSession
Removes the given extension from this session.
- Specified by:
removeExtension
in interfaceServerSession
- Parameters:
extension
- the extension to remove- See Also:
-
getExtensions
- Specified by:
getExtensions
in interfaceServerSession
- Returns:
- an immutable list of extensions present in this ServerSession instance
- See Also:
-
batch
Description copied from interface:Session
Executes the given command in a batch so that any Bayeux message sent by the command (via the Bayeux API) is queued up until the end of the command and then all messages are sent at once.
-
deliver
Description copied from interface:ServerSession
Delivers the given message to this session.
This is different from
ServerChannel.publish(Session, ServerMessage.Mutable, Promise)
as the message is delivered only to this session and not to all subscribers of the channel.The message should still have a channel id specified, so that the ClientSession may identify the listeners the message should be delivered to.
- Specified by:
deliver
in interfaceServerSession
- Parameters:
sender
- the session delivering the messagemessage
- the message to deliverpromise
- the promise to notify with the result of the deliver- See Also:
-
deliver
Description copied from interface:ServerSession
Delivers the given information to this session.
- Specified by:
deliver
in interfaceServerSession
- Parameters:
sender
- the session delivering the messagechannelId
- the channel of the messagedata
- the data of the messagepromise
- the promise to notify with the result of the deliver- See Also:
-
deliver1
protected void deliver1(ServerSession sender, ServerMessage.Mutable mutable, Promise<Boolean> promise) -
extendOutgoing
protected void extendOutgoing(ServerSession sender, ServerMessage.Mutable message, Promise<ServerMessage.Mutable> promise) -
handshake
-
connected
public boolean connected() -
disconnect
public void disconnect()Description copied from interface:Session
Disconnects this session, ending the link between the client and the server peers.- Specified by:
disconnect
in interfaceSession
- See Also:
-
startBatch
public void startBatch()Description copied from interface:Session
Starts a batch, to be ended with
Session.endBatch()
.The
Session.batch(Runnable)
method should be preferred since it automatically starts and ends a batch without relying on a try/finally block.This method is to be used in the cases where the use of
Session.batch(Runnable)
is not possible or would make the code more complex.- Specified by:
startBatch
in interfaceSession
- See Also:
-
endBatch
public boolean endBatch()Description copied from interface:Session
Ends a batch started with
Session.startBatch()
. -
getLocalSession
- Specified by:
getLocalSession
in interfaceServerSession
- Returns:
- the
LocalSession
associated with this session, or null if this is a session representing a remote client.
-
isLocalSession
public boolean isLocalSession()- Specified by:
isLocalSession
in interfaceServerSession
- Returns:
- whether this is a session for a local client on server-side
-
addListener
Description copied from interface:ServerSession
Adds the given listener to this session.
- Specified by:
addListener
in interfaceServerSession
- Parameters:
listener
- the listener to add- See Also:
-
getId
Description copied from interface:Session
The clientId of the session.
This would more correctly be called a "sessionId", but for backwards compatibility with the Bayeux protocol, it is a field called "clientId" that identifies a session.
-
getLock
-
getQueue
-
hasNonLazyMessages
public boolean hasNonLazyMessages() -
addMessage
-
takeQueue
-
notifySuspended
-
notifyResumed
-
removeListener
Description copied from interface:ServerSession
Removes the given listener from this session.
- Specified by:
removeListener
in interfaceServerSession
- Parameters:
listener
- the listener to remove- See Also:
-
getListeners
-
setScheduler
-
shouldSchedule
public boolean shouldSchedule() -
flush
public void flush() -
destroyScheduler
public void destroyScheduler() -
cancelExpiration
public void cancelExpiration(boolean metaConnect) -
scheduleExpiration
public void scheduleExpiration(long defaultInterval, long defaultMaxInterval, long metaConnectCycle) -
getMetaConnectCycle
public long getMetaConnectCycle() -
getMaxInterval
public long getMaxInterval()- Specified by:
getMaxInterval
in interfaceServerSession
- Returns:
- the max period of time, in milliseconds, that the server waits before expiring the session when the client does not send messages to the server, or -1 if the default value is used
-
setMaxInterval
public void setMaxInterval(long maxInterval) - Specified by:
setMaxInterval
in interfaceServerSession
- Parameters:
maxInterval
- the max period of time, in milliseconds, that the server waits before expiring the session
-
getIntervalNanoTime
public long getIntervalNanoTime()- Returns:
- the nanoTime at which this session is expired
-
getAttribute
Description copied from interface:Session
Retrieves the value of named session attribute.
- Specified by:
getAttribute
in interfaceSession
- Parameters:
name
- the name of the attribute- Returns:
- the attribute value or null if the attribute is not present
-
getAttributeNames
- Specified by:
getAttributeNames
in interfaceSession
- Returns:
- the session attribute names.
-
removeAttribute
Description copied from interface:Session
Removes a named session attribute.
- Specified by:
removeAttribute
in interfaceSession
- Parameters:
name
- the name of the attribute- Returns:
- the value of the attribute
-
setAttribute
Description copied from interface:Session
Sets a named session attribute value.
Session attributes are convenience data that allows arbitrary application data to be associated with a session.
- Specified by:
setAttribute
in interfaceSession
- Parameters:
name
- the attribute namevalue
- the attribute value
-
isHandshook
public boolean isHandshook()Description copied from interface:Session
A handshook session is a session where the handshake has successfully completed
- Specified by:
isHandshook
in interfaceSession
- Returns:
- whether the session is handshook
-
isConnected
public boolean isConnected()Description copied from interface:Session
A connected session is a session where the link between the client and the server has been established.
- Specified by:
isConnected
in interfaceSession
- Returns:
- whether the session is connected
- See Also:
-
isDisconnected
public boolean isDisconnected() -
isTerminated
public boolean isTerminated() -
extendIncoming
-
reAdvise
public void reAdvise() -
takeAdvice
-
getServerTransport
- Specified by:
getServerTransport
in interfaceServerSession
- Returns:
- the ServerTransport associated with this session
-
setServerTransport
-
updateServerEndPoint
-
getTimeout
public long getTimeout()- Specified by:
getTimeout
in interfaceServerSession
- Returns:
- the period of time, in milliseconds, that the server will hold connect messages for this session or -1 if the default value is used
- See Also:
-
getInterval
public long getInterval()- Specified by:
getInterval
in interfaceServerSession
- Returns:
- the period of time, in milliseconds, that the client associated with this session will wait before issuing a connect message, or -1 if the default value is used
- See Also:
-
setTimeout
public void setTimeout(long timeoutMS) - Specified by:
setTimeout
in interfaceServerSession
- Parameters:
timeoutMS
- the period of time, in milliseconds, that the server will hold connect messages for this session
-
setInterval
public void setInterval(long intervalMS) - Specified by:
setInterval
in interfaceServerSession
- Parameters:
intervalMS
- the period of time, in milliseconds, that the client associated with this session will wait before issuing a connect message
-
isBroadcastToPublisher
public boolean isBroadcastToPublisher()- Specified by:
isBroadcastToPublisher
in interfaceServerSession
- Returns:
- whether this session sends messages back to itself
-
setBroadcastToPublisher
public void setBroadcastToPublisher(boolean value) Description copied from interface:ServerSession
Sets whether this session sends messages back to itself.- Specified by:
setBroadcastToPublisher
in interfaceServerSession
- Parameters:
value
- whether this session sends messages back to itself
-
removed
- Parameters:
message
- the message that caused the removal, or nulltimeout
- whether the session has been removed due a timeout- Returns:
- True if the session was connected.
-
setMetaConnectDeliveryOnly
public void setMetaConnectDeliveryOnly(boolean meta) Description copied from interface:ServerSession
Sets whether delivery of messages only happen via the
/meta/connect
channel.Transports that use more than one connection to the server (e.g. HTTP transports) may deliver some messages in one connection and some in another connection, causing messages to arrive out-of-order.
Forcing messages to be delivered only via the
/meta/connect
channel guarantees server-to-client message ordering.- Specified by:
setMetaConnectDeliveryOnly
in interfaceServerSession
- Parameters:
meta
- whether delivery of messages only happens via the/meta/connect
channel
-
isMetaConnectDeliveryOnly
public boolean isMetaConnectDeliveryOnly()- Specified by:
isMetaConnectDeliveryOnly
in interfaceServerSession
- Returns:
- whether delivery of messages only happens via the
/meta/connect
channel
-
isAllowMessageDeliveryDuringHandshake
public boolean isAllowMessageDeliveryDuringHandshake() -
setAllowMessageDeliveryDuringHandshake
public void setAllowMessageDeliveryDuringHandshake(boolean allow) -
subscribe
-
unsubscribedFrom
-
calculateTimeout
public long calculateTimeout(long defaultTimeout) -
calculateInterval
public long calculateInterval(long defaultInterval) -
updateTransientTimeout
public void updateTransientTimeout(long timeout) Updates the transient timeout with the given value. The transient timeout is the one sent by the client, that should temporarily override the session/transport timeout, for example when the client sends {timeout:0}- Parameters:
timeout
- the value to update the timeout to- See Also:
-
updateTransientInterval
public void updateTransientInterval(long interval) Updates the transient interval with the given value. The transient interval is the one sent by the client, that should temporarily override the session/transport interval, for example when the client sends {timeout:0,interval:60000}- Parameters:
interval
- the value to update the interval to- See Also:
-
dump
- Specified by:
dump
in interfaceorg.eclipse.jetty.util.component.Dumpable
- Throws:
IOException
-
toString
-