Class AbstractClientSession

  • All Implemented Interfaces:
    ClientSession, Session, org.eclipse.jetty.util.component.Dumpable
    Direct Known Subclasses:
    BayeuxClient, LocalSessionImpl

    public abstract class AbstractClientSession
    extends java.lang.Object
    implements ClientSession, org.eclipse.jetty.util.component.Dumpable

    Partial implementation of ClientSession.

    It handles extensions and batching, and provides utility methods to be used by subclasses.

    • Constructor Detail

      • AbstractClientSession

        protected AbstractClientSession()
    • Method Detail

      • newMessageId

        protected java.lang.String newMessageId()
      • extendOutgoing

        protected void extendOutgoing​(Message.Mutable message,
                                      Promise<java.lang.Boolean> promise)
      • extendIncoming

        protected void extendIncoming​(Message.Mutable message,
                                      Promise<java.lang.Boolean> promise)
      • newChannelId

        protected abstract ChannelId newChannelId​(java.lang.String channelId)
      • getChannel

        public ClientSessionChannel getChannel​(java.lang.String channelName)
        Description copied from interface: ClientSession

        Returns a client side channel scoped by this session.

        The channel name may be for a specific channel (e.g. "/foo/bar") or for a wild channel (e.g. "/meta/**" or "/foo/*").

        This method will always return a channel, even if the the channel has not been created on the server side. The server side channel is only involved once a publish or subscribe method is called on the channel returned by this method.

        Typical usage examples are:

             clientSession.getChannel("/foo/bar").subscribe(mySubscriptionListener);
             clientSession.getChannel("/foo/bar").publish("Hello");
             clientSession.getChannel("/meta/*").addListener(myMetaChannelListener);
         
        Specified by:
        getChannel in interface ClientSession
        Parameters:
        channelName - specific or wild channel name.
        Returns:
        a channel scoped by this session.
      • sendBatch

        protected abstract void sendBatch()
      • 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.

        Specified by:
        batch in interface Session
        Parameters:
        batch - the Runnable to run as a batch
      • isBatching

        protected boolean isBatching()
      • 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 interface Session
        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 interface Session
        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 interface Session
        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 interface Session
        Parameters:
        name - the attribute name
        value - the attribute value
      • remoteCall

        public void remoteCall​(java.lang.String target,
                               java.lang.Object data,
                               ClientSession.MessageListener callback)
        Description copied from interface: ClientSession

        Performs a remote call to the server, to the specified target, and with the given data as payload.

        The remote call response will be delivered via the callback parameter.

        Typical usage:

         clientSession.remoteCall("getOnlineStatus", userId, new MessageListener()
         {
             @Override
             public void onMessage(Message message)
             {
                 if (message.isSuccessful())
                 {
                     String status = (String)message.getData();
                     // Update UI with online status.
                 }
                 else
                 {
                     // Remote call failed.
                 }
             }
         });
         
        Specified by:
        remoteCall in interface ClientSession
        Parameters:
        target - the remote call target
        data - the remote call parameters
        callback - the listener that receives the remote call response
      • resetSubscriptions

        protected void resetSubscriptions()
      • receive

        public void receive​(Message.Mutable message,
                            Promise<java.lang.Void> promise)

        Receives a message (from the server) and process it.

        Processing the message involves calling the receive extensions and the channel listeners.

        Parameters:
        message - the message received.
        promise - the promise notified of the receive processing
      • notifyListeners

        protected void notifyListeners​(Message.Mutable message)
      • dump

        public void dump​(java.lang.Appendable out,
                         java.lang.String indent)
                  throws java.io.IOException
        Specified by:
        dump in interface org.eclipse.jetty.util.component.Dumpable
        Throws:
        java.io.IOException