Class SelectorManager

    • Field Detail

      • DEFAULT_CONNECT_TIMEOUT

        public static final int DEFAULT_CONNECT_TIMEOUT
        See Also:
        Constant Field Values
      • LOG

        protected static final org.slf4j.Logger LOG
    • Constructor Detail

      • SelectorManager

        protected SelectorManager​(java.util.concurrent.Executor executor,
                                  Scheduler scheduler)
      • SelectorManager

        protected SelectorManager​(java.util.concurrent.Executor executor,
                                  Scheduler scheduler,
                                  int selectors)
        Parameters:
        executor - The executor to use for handling selected EndPoints
        scheduler - The scheduler to use for timing events
        selectors - The number of selectors to use, or -1 for a default derived from a heuristic over available CPUs and thread pool size.
    • Method Detail

      • getExecutor

        @ManagedAttribute("The Executor")
        public java.util.concurrent.Executor getExecutor()
      • getConnectTimeout

        @ManagedAttribute("The Connection timeout (ms)")
        public long getConnectTimeout()
        Get the connect timeout
        Returns:
        the connect timeout (in milliseconds)
      • setConnectTimeout

        public void setConnectTimeout​(long milliseconds)
        Set the connect timeout (in milliseconds)
        Parameters:
        milliseconds - the number of milliseconds for the timeout
      • execute

        protected void execute​(java.lang.Runnable task)
        Executes the given task in a different thread.
        Parameters:
        task - the task to execute
      • getSelectorCount

        @ManagedAttribute("The number of NIO Selectors")
        public int getSelectorCount()
        Returns:
        the number of selectors in use
      • connect

        public void connect​(java.nio.channels.SelectableChannel channel,
                            java.lang.Object attachment)

        Registers a channel to perform a non-blocking connect.

        The channel must be set in non-blocking mode, SocketChannel.connect(SocketAddress) must be called prior to calling this method, and the connect operation must not be completed (the return value of SocketChannel.connect(SocketAddress) must be false).

        Parameters:
        channel - the channel to register
        attachment - the attachment object
        See Also:
        accept(SelectableChannel, Object)
      • accept

        public void accept​(java.nio.channels.SelectableChannel channel)
        Parameters:
        channel - the channel to accept
        See Also:
        accept(SelectableChannel, Object)
      • accept

        public void accept​(java.nio.channels.SelectableChannel channel,
                           java.lang.Object attachment)

        Registers a channel to perform non-blocking read/write operations.

        This method is called just after a channel has been accepted by ServerSocketChannel.accept(), or just after having performed a blocking connect via Socket.connect(SocketAddress, int), or just after a non-blocking connect via SocketChannel.connect(SocketAddress) that completed successfully.

        Parameters:
        channel - the channel to register
        attachment - the attachment object
      • acceptor

        public java.io.Closeable acceptor​(java.nio.channels.SelectableChannel server)

        Registers a server channel for accept operations. When a SocketChannel is accepted from the given ServerSocketChannel then the accepted(SelectableChannel) method is called, which must be overridden by a derivation of this class to handle the accepted channel

        Parameters:
        server - the server channel to register
        Returns:
        A Closable that allows the acceptor to be cancelled
      • accepted

        protected void accepted​(java.nio.channels.SelectableChannel channel)
                         throws java.io.IOException
        Callback method when a channel is accepted from the ServerSocketChannel passed to acceptor(SelectableChannel). The default impl throws an UnsupportedOperationException, so it must be overridden by subclasses if a server channel is provided.
        Parameters:
        channel - the
        Throws:
        java.io.IOException - if unable to accept channel
      • doStart

        protected void doStart()
                        throws java.lang.Exception
        Description copied from class: ContainerLifeCycle
        Starts the managed lifecycle beans in the order they were added.
        Overrides:
        doStart in class ContainerLifeCycle
        Throws:
        AbstractLifeCycle.StopException - If thrown, the lifecycle will immediately be stopped.
        java.lang.Exception - If there was a problem starting. Will cause a transition to FAILED state
      • newSelector

        protected java.nio.channels.Selector newSelector()
                                                  throws java.io.IOException
        Throws:
        java.io.IOException
      • doStop

        protected void doStop()
                       throws java.lang.Exception
        Description copied from class: ContainerLifeCycle
        Stops the managed lifecycle beans in the reverse order they were added.
        Overrides:
        doStop in class ContainerLifeCycle
        Throws:
        java.lang.Exception - If there was a problem stopping. Will cause a transition to FAILED state
      • endPointOpened

        protected void endPointOpened​(EndPoint endpoint)

        Callback method invoked when an endpoint is opened.

        Parameters:
        endpoint - the endpoint being opened
      • endPointClosed

        protected void endPointClosed​(EndPoint endpoint)

        Callback method invoked when an endpoint is closed.

        Parameters:
        endpoint - the endpoint being closed
      • connectionOpened

        public void connectionOpened​(Connection connection,
                                     java.lang.Object context)

        Callback method invoked when a connection is opened.

        Parameters:
        connection - the connection just opened
        context - the attachment associated with the creation of the connection
        See Also:
        newConnection(SelectableChannel, EndPoint, Object)
      • connectionClosed

        public void connectionClosed​(Connection connection,
                                     java.lang.Throwable cause)

        Callback method invoked when a connection is closed.

        Parameters:
        connection - the connection just closed
        cause - the cause of the close or null for normal close
      • doFinishConnect

        protected boolean doFinishConnect​(java.nio.channels.SelectableChannel channel)
                                   throws java.io.IOException
        Throws:
        java.io.IOException
      • isConnectionPending

        protected boolean isConnectionPending​(java.nio.channels.SelectableChannel channel)
      • doAccept

        protected java.nio.channels.SelectableChannel doAccept​(java.nio.channels.SelectableChannel server)
                                                        throws java.io.IOException
        Throws:
        java.io.IOException
      • connectionFailed

        protected void connectionFailed​(java.nio.channels.SelectableChannel channel,
                                        java.lang.Throwable ex,
                                        java.lang.Object attachment)

        Callback method invoked when a non-blocking connect cannot be completed.

        By default it just logs with level warning.

        Parameters:
        channel - the channel that attempted the connect
        ex - the exception that caused the connect to fail
        attachment - the attachment object associated at registration
      • newConnection

        public abstract Connection newConnection​(java.nio.channels.SelectableChannel channel,
                                                 EndPoint endpoint,
                                                 java.lang.Object attachment)
                                          throws java.io.IOException

        Factory method to create Connection.

        Parameters:
        channel - the channel associated to the connection
        endpoint - the endpoint
        attachment - the attachment
        Returns:
        a new connection
        Throws:
        java.io.IOException - if unable to create new connection
      • onAccepting

        protected void onAccepting​(java.nio.channels.SelectableChannel channel)
      • onAcceptFailed

        protected void onAcceptFailed​(java.nio.channels.SelectableChannel channel,
                                      java.lang.Throwable cause)
      • onAccepted

        protected void onAccepted​(java.nio.channels.SelectableChannel channel)