Class Reactor

  • All Implemented Interfaces:
    java.lang.Runnable

    public final class Reactor
    extends java.lang.Thread
    Reactor pattern
    • Field Detail

      • JVMBUG_THRESHHOLD

        public static final int JVMBUG_THRESHHOLD
        JVM bug threshold
      • JVMBUG_THRESHHOLD2

        public static final int JVMBUG_THRESHHOLD2
      • JVMBUG_THRESHHOLD1

        public static final int JVMBUG_THRESHHOLD1
      • log

        private static final org.slf4j.Logger log
      • jvmBug0

        private boolean jvmBug0
      • jvmBug1

        private boolean jvmBug1
      • reactorIndex

        private final int reactorIndex
      • jvmBug

        private final java.util.concurrent.atomic.AtomicInteger jvmBug
      • lastJVMBug

        private long lastJVMBug
      • selector

        private java.nio.channels.Selector selector
      • wakenUp

        private final java.util.concurrent.atomic.AtomicBoolean wakenUp
      • gate

        private final java.util.concurrent.locks.Lock gate
      • selectTries

        private int selectTries
      • nextTimeout

        private long nextTimeout
      • lastCheckTimestamp

        private long lastCheckTimestamp
    • Constructor Detail

      • Reactor

        Reactor​(SelectorManager selectorManager,
                Configuration configuration,
                int index)
         throws java.io.IOException
        Throws:
        java.io.IOException
    • Method Detail

      • getSelector

        public final java.nio.channels.Selector getSelector()
      • getReactorIndex

        public int getReactorIndex()
      • run

        public void run()
        Specified by:
        run in interface java.lang.Runnable
        Overrides:
        run in class java.lang.Thread
      • lookJVMBug

        private boolean lookJVMBug​(long before,
                                   int selected,
                                   long wait)
                            throws java.io.IOException
        Look jvm bug
        Parameters:
        before -
        selected -
        wait -
        Returns:
        Throws:
        java.io.IOException
      • dispatchEvent

        public final void dispatchEvent​(java.util.Set<java.nio.channels.SelectionKey> selectedKeySet)
        Dispatch selected event
        Parameters:
        selectedKeySet -
      • unregisterChannel

        final void unregisterChannel​(java.nio.channels.SelectableChannel channel)
                              throws java.io.IOException
        Throws:
        java.io.IOException
      • checkSessionTimeout

        private final long checkSessionTimeout()
        Check session timeout or idle
        Returns:
      • isNeedCheckSessionIdleTimeout

        private boolean isNeedCheckSessionIdleTimeout()
      • getSessionFromAttchment

        private final Session getSessionFromAttchment​(java.nio.channels.SelectionKey key)
      • registerSession

        public final void registerSession​(Session session,
                                          EventType event)
      • isReactorThread

        private final boolean isReactorThread()
      • beforeSelect

        final void beforeSelect()
      • processRegister

        private final void processRegister()
      • dispatchSessionEvent

        private final void dispatchSessionEvent​(Session session,
                                                EventType event)
      • postSelect

        public final void postSelect​(java.util.Set<java.nio.channels.SelectionKey> selectedKeys,
                                     java.util.Set<java.nio.channels.SelectionKey> allKeys)
      • checkExpiredIdle

        private long checkExpiredIdle​(java.nio.channels.SelectionKey key,
                                      Session session)
      • checkIdle

        private final void checkIdle​(Session session)
      • checkExpired

        private final boolean checkExpired​(java.nio.channels.SelectionKey key,
                                           Session session)
      • registerChannel

        public final void registerChannel​(java.nio.channels.SelectableChannel channel,
                                          int ops,
                                          java.lang.Object attachment)
      • registerChannelNow

        private void registerChannelNow​(java.nio.channels.SelectableChannel channel,
                                        int ops,
                                        java.lang.Object attachment)
      • wakeup

        final void wakeup()
      • selectNow

        final void selectNow()
                      throws java.io.IOException
        Throws:
        java.io.IOException