Class WebServerClientSocketThread

  • All Implemented Interfaces:
    java.lang.Runnable

    public class WebServerClientSocketThread
    extends java.lang.Thread
    Thread to handle one user client connection at the WebServer side. Reads always one line from the socket, hands it over to the actual WebServerClient to parse and handle it.
    Author:
    Clemens Katzer
    • Field Detail

      • LOGGER

        static final java.util.logging.Logger LOGGER
      • PING_REQUEST_INTERVAL_SECONDS

        private static final long PING_REQUEST_INTERVAL_SECONDS
        See Also:
        Constant Field Values
      • IDLE_WARNING_INTERVAL_MINUTES

        private static final int IDLE_WARNING_INTERVAL_MINUTES
        See Also:
        Constant Field Values
      • socket

        private java.net.Socket socket
      • lastPacketReceived

        private long lastPacketReceived
      • pingsTried

        private int pingsTried
      • pingCounter

        private int pingCounter
      • idleWarningsSent

        private int idleWarningsSent
      • connLostWarningLogged

        private boolean connLostWarningLogged
      • stopper

        private java.lang.Thread stopper
      • forcedLogout

        private boolean forcedLogout
      • done

        private boolean done
      • toldToTerminate

        private boolean toldToTerminate
      • lastWasLogin

        private boolean lastWasLogin
    • Constructor Detail

      • WebServerClientSocketThread

        public WebServerClientSocketThread​(WebServerClient theClient,
                                           java.net.Socket socket)
    • Method Detail

      • getClientInfo

        java.lang.String getClientInfo()
      • createStopper

        public void createStopper​(java.lang.Runnable r)
      • tellToTerminate

        public void tellToTerminate()
      • setLastWasLogin

        public void setLastWasLogin()
      • closeAndCleanupSocket

        private void closeAndCleanupSocket()
      • run

        public void run()
        prepare socket to read/write, and then loop as long as lines from client come, and parse them
        Specified by:
        run in interface java.lang.Runnable
        Overrides:
        run in class java.lang.Thread
      • sendToClient

        public void sendToClient​(java.lang.String s)
        Send the given string/message over the socket to the client Calculate the time how long it took to write it to the socket, and log a warning if it was blocked in the write for more than MAX_WRITE_BLOCKTIME_MS milliseconds.
        Parameters:
        s -
      • flushMessages

        public void flushMessages()
        Waits until writer has written all messages
      • storeEntry

        public void storeEntry​(long requestResponseArriveTime,
                               long roundtripTime)
        Simply forward the RTT entry creation to the RTT bookkeeper
        Parameters:
        requestResponseArriveTime - When response arrived
        roundtripTime - Actual roundtrip time
      • requestPingIfNeeded

        public void requestPingIfNeeded​(long now)
      • requestPingNow

        public void requestPingNow()
      • markForcedLogout

        private void markForcedLogout()
      • wasForcedLogout

        boolean wasForcedLogout()
      • clearIdleWarningsSent

        public void clearIdleWarningsSent()
      • checkMaxIdleTime

        public void checkMaxIdleTime​(long now)
        Currently this will log out only older clients, because they do not respond to the ping packets. TODO in future, distinct between ping packets and all other activities, and log out user which hasn't done anything and left WebClient standing around idle for very long.
        Parameters:
        now -