Class ServerSessionImpl
- java.lang.Object
-
- org.cometd.server.ServerSessionImpl
-
- All Implemented Interfaces:
ServerSession
,Session
,org.eclipse.jetty.util.component.Dumpable
public class ServerSessionImpl extends java.lang.Object implements ServerSession, 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
-
-
Constructor Summary
Constructors Constructor Description ServerSessionImpl(BayeuxServerImpl bayeux)
ServerSessionImpl(BayeuxServerImpl bayeux, LocalSessionImpl localSession, java.lang.String idHint)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description void
addExtension(ServerSession.Extension extension)
Adds the given extension to this session.void
addListener(ServerSession.ServerSessionListener listener)
Adds the given listener to this session.protected void
addMessage(ServerMessage message)
void
batch(java.lang.Runnable batch)
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)
protected boolean
connected()
void
deliver(Session sender, java.lang.String channelId, java.lang.Object data, Promise<java.lang.Boolean> promise)
Delivers the given information to this session.void
deliver(Session sender, ServerMessage.Mutable message, Promise<java.lang.Boolean> promise)
Delivers the given message to this session.protected void
deliver1(ServerSession sender, ServerMessage.Mutable mutable, Promise<java.lang.Boolean> promise)
void
destroyScheduler()
void
disconnect()
Disconnects this session, ending the link between the client and the server peers.void
dump(java.lang.Appendable out, java.lang.String indent)
boolean
endBatch()
Ends a batch started withSession.startBatch()
.protected void
extendIncoming(ServerMessage.Mutable message, Promise<java.lang.Boolean> promise)
protected void
extendOutgoing(ServerSession sender, ServerMessage.Mutable message, Promise<ServerMessage.Mutable> promise)
void
flush()
java.lang.Object
getAttribute(java.lang.String name)
Retrieves the value of named session attribute.java.util.Set<java.lang.String>
getAttributeNames()
BayeuxServerImpl
getBayeuxServer()
java.lang.String
getBrowserId()
java.util.List<ServerSession.Extension>
getExtensions()
java.lang.String
getId()
The clientId of the session.long
getInterval()
java.util.List<ServerSession.ServerSessionListener>
getListeners()
LocalSession
getLocalSession()
java.util.concurrent.locks.Lock
getLock()
long
getMaxInterval()
java.util.Queue<ServerMessage>
getQueue()
ServerTransport
getServerTransport()
java.util.Set<ServerChannel>
getSubscriptions()
long
getTimeout()
java.lang.String
getUserAgent()
protected boolean
handshake(ServerMessage.Mutable message)
boolean
hasNonLazyMessages()
boolean
isAllowMessageDeliveryDuringHandshake()
boolean
isBroadcastToPublisher()
boolean
isConnected()
A connected session is a session where the link between the client and the server has been established.boolean
isDisconnected()
boolean
isHandshook()
A handshook session is a session where the handshake has successfully completedboolean
isLocalSession()
boolean
isMetaConnectDeliveryOnly()
boolean
isTerminated()
void
notifyResumed(ServerMessage message, boolean timeout)
void
notifySuspended(ServerMessage message, long timeout)
void
reAdvise()
java.lang.Object
removeAttribute(java.lang.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
removeListener(ServerSession.ServerSessionListener listener)
Removes the given listener from this session.void
scheduleExpiration(long defaultInterval, long defaultMaxInterval, long metaConnectCycle)
void
setAllowMessageDeliveryDuringHandshake(boolean allow)
void
setAttribute(java.lang.String name, java.lang.Object value)
Sets a named session attribute value.void
setBroadcastToPublisher(boolean value)
Sets whether this session sends messages back to itself.void
setBrowserId(java.lang.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(java.lang.String userAgent)
boolean
shouldSchedule()
void
startBatch()
Starts a batch, to be ended withSession.endBatch()
.protected boolean
subscribe(ServerChannelImpl channel)
protected boolean
sweep(long now)
java.util.Map<java.lang.String,java.lang.Object>
takeAdvice(ServerTransport transport)
java.util.List<ServerMessage>
takeQueue(java.util.List<ServerMessage.Mutable> replies)
java.lang.String
toString()
protected void
unsubscribedFrom(ServerChannelImpl channel)
boolean
updateServerEndPoint(java.lang.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.
-
-
-
Constructor Detail
-
ServerSessionImpl
public ServerSessionImpl(BayeuxServerImpl bayeux)
-
ServerSessionImpl
public ServerSessionImpl(BayeuxServerImpl bayeux, LocalSessionImpl localSession, java.lang.String idHint)
-
-
Method Detail
-
getBayeuxServer
public BayeuxServerImpl getBayeuxServer()
-
getUserAgent
public java.lang.String getUserAgent()
- Specified by:
getUserAgent
in interfaceServerSession
- Returns:
- the remote user agent
-
setUserAgent
public void setUserAgent(java.lang.String userAgent)
- Parameters:
userAgent
- the remote user agent
-
getBrowserId
public java.lang.String getBrowserId()
- Returns:
- the remote client identifier
-
setBrowserId
public void setBrowserId(java.lang.String browserId)
Sets a remote client identifier, typically a browser.
- Parameters:
browserId
- the remote client identifier
-
sweep
protected boolean sweep(long now)
-
getSubscriptions
public java.util.Set<ServerChannel> getSubscriptions()
- Specified by:
getSubscriptions
in interfaceServerSession
- Returns:
- the set of channels to which this session is subscribed to
-
addExtension
public void addExtension(ServerSession.Extension extension)
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:
ServerSession.removeExtension(Extension)
-
removeExtension
public void removeExtension(ServerSession.Extension extension)
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:
ServerSession.addExtension(Extension)
-
getExtensions
public java.util.List<ServerSession.Extension> getExtensions()
- Specified by:
getExtensions
in interfaceServerSession
- Returns:
- an immutable list of extensions present in this ServerSession instance
- See Also:
ServerSession.addExtension(Extension)
-
batch
public void batch(java.lang.Runnable 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
public void deliver(Session sender, ServerMessage.Mutable message, Promise<java.lang.Boolean> promise)
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:
ServerSession.deliver(Session, String, Object, Promise)
-
deliver
public void deliver(Session sender, java.lang.String channelId, java.lang.Object data, Promise<java.lang.Boolean> promise)
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:
ServerSession.deliver(Session, ServerMessage.Mutable, Promise)
-
deliver1
protected void deliver1(ServerSession sender, ServerMessage.Mutable mutable, Promise<java.lang.Boolean> promise)
-
extendOutgoing
protected void extendOutgoing(ServerSession sender, ServerMessage.Mutable message, Promise<ServerMessage.Mutable> promise)
-
handshake
protected boolean handshake(ServerMessage.Mutable message)
-
connected
protected 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:
Session.isConnected()
-
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:
Session.endBatch()
,Session.batch(Runnable)
-
endBatch
public boolean endBatch()
Description copied from interface:Session
Ends a batch started with
Session.startBatch()
.- Specified by:
endBatch
in interfaceSession
- Returns:
- true if the batch ended and there were messages to send.
- See Also:
Session.startBatch()
-
getLocalSession
public LocalSession 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
public void addListener(ServerSession.ServerSessionListener listener)
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:
ServerSession.removeListener(ServerSessionListener)
-
getId
public java.lang.String 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
public java.util.concurrent.locks.Lock getLock()
-
getQueue
public java.util.Queue<ServerMessage> getQueue()
-
hasNonLazyMessages
public boolean hasNonLazyMessages()
-
addMessage
protected void addMessage(ServerMessage message)
-
takeQueue
public java.util.List<ServerMessage> takeQueue(java.util.List<ServerMessage.Mutable> replies)
-
notifySuspended
public void notifySuspended(ServerMessage message, long timeout)
-
notifyResumed
public void notifyResumed(ServerMessage message, boolean timeout)
-
removeListener
public void removeListener(ServerSession.ServerSessionListener listener)
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:
ServerSession.addListener(ServerSessionListener)
-
getListeners
public java.util.List<ServerSession.ServerSessionListener> getListeners()
-
setScheduler
public void setScheduler(AbstractServerTransport.Scheduler newScheduler)
-
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)
-
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
-
getAttribute
public java.lang.Object getAttribute(java.lang.String name)
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
public java.util.Set<java.lang.String> getAttributeNames()
- Specified by:
getAttributeNames
in interfaceSession
- Returns:
- the list of session attribute names.
-
removeAttribute
public java.lang.Object removeAttribute(java.lang.String name)
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
public void setAttribute(java.lang.String name, java.lang.Object value)
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:
Session.disconnect()
-
isDisconnected
public boolean isDisconnected()
-
isTerminated
public boolean isTerminated()
-
extendIncoming
protected void extendIncoming(ServerMessage.Mutable message, Promise<java.lang.Boolean> promise)
-
reAdvise
public void reAdvise()
-
takeAdvice
public java.util.Map<java.lang.String,java.lang.Object> takeAdvice(ServerTransport transport)
-
getServerTransport
public ServerTransport getServerTransport()
- Specified by:
getServerTransport
in interfaceServerSession
- Returns:
- the ServerTransport associated with this session
-
setServerTransport
public void setServerTransport(ServerTransport transport)
-
updateServerEndPoint
public boolean updateServerEndPoint(java.lang.Object newEndPoint)
-
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:
ServerTransport.getTimeout()
-
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:
ServerTransport.getInterval()
,ServerSession.setInterval(long)
-
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
protected boolean removed(ServerMessage message, boolean timeout)
- 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
protected boolean subscribe(ServerChannelImpl channel)
-
unsubscribedFrom
protected void unsubscribedFrom(ServerChannelImpl channel)
-
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(long)
-
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:
updateTransientTimeout(long)
-
dump
public void dump(java.lang.Appendable out, java.lang.String indent) throws java.io.IOException
- Specified by:
dump
in interfaceorg.eclipse.jetty.util.component.Dumpable
- Throws:
java.io.IOException
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
-