Class SocketChannelManager

  • All Implemented Interfaces:
    Serializable

    @SessionScoped
    public class SocketChannelManager
    extends Object
    implements Serializable

    This web socket channel manager holds all application and session scoped web socket channel identifiers registered by <o:socket>.

    Since:
    2.3
    Author:
    Bauke Scholtz
    See Also:
    Socket, Serialized Form
    • Constructor Detail

      • SocketChannelManager

        public SocketChannelManager()
    • Method Detail

      • register

        protected String register​(String channel,
                                  String scope,
                                  Serializable user)
        Register given channel on given scope and returns the web socket channel identifier.
        Parameters:
        channel - The web socket channel.
        scope - The web socket scope. Supported values are application, session and view, case insensitive. If null, the default is application.
        user - The user object representing the owner of the given channel. If not null, then scope may not be application.
        Returns:
        The web socket channel identifier. This can be used as web socket URI.
        Throws:
        IllegalArgumentException - When the scope is invalid or when channel already exists on a different scope.
      • switchUser

        protected void switchUser​(String channel,
                                  String scope,
                                  Serializable oldUser,
                                  Serializable newUser)
        Switch the user on the given channel on the given scope from the given old user to the given new user.
        Parameters:
        channel - The web socket channel.
        scope - The web socket scope. Supported values are application, session and view, case insensitive. If null, the default is application.
        oldUser - The user object representing the old owner of the given channel. If not null, then scope may not be application.
        newUser - The user object representing the new owner of the given channel. If not null, then scope may not be application.
      • deregisterSessionScope

        @PreDestroy
        protected void deregisterSessionScope()
        When current session scope is about to be destroyed, deregister all session scope channels and explicitly close any open web sockets associated with it to avoid stale websockets. If any, also deregister session users.
      • getSessionScopedChannels

        protected Map<String,​String> getSessionScopedChannels()
        For internal usage only. This makes it possible to reference session scope channel IDs during injection time of SocketPushContext (the CDI session scope is not necessarily active during push send time). This should actually be package private, but package private methods in CDI beans are subject to memory leaks.
        Returns:
        Session scope channel IDs.
      • getViewScopedChannels

        protected Map<String,​String> getViewScopedChannels​(boolean create)
        For internal usage only. This makes it possible to reference view scope channel IDs during injection time of SocketPushContext (the Faces view scope is not necessarily active during push send time). This should actually be package private, but package private methods in CDI beans are subject to memory leaks.
        Parameters:
        create - Whether or not to auto-create the entry in Faces view scope.
        Returns:
        View scope channel IDs.
        Throws:
        IllegalStateException - Since OmniFaces 4.6 when the Faces view scope is not available while create is true.