Class WebServerClientSocketThread

java.lang.Object
java.lang.Thread
net.sf.colossus.webserver.WebServerClientSocketThread
All Implemented Interfaces:
Runnable

public class WebServerClientSocketThread extends 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 Details

    • LOGGER

      static final Logger LOGGER
    • PING_REQUEST_INTERVAL_SECONDS

      private static final long PING_REQUEST_INTERVAL_SECONDS
      See Also:
    • PING_MAX_TRIES

      private static final int PING_MAX_TRIES
      See Also:
    • IDLE_WARNING_INTERVAL_MINUTES

      private static final int IDLE_WARNING_INTERVAL_MINUTES
      See Also:
    • IDLE_WARNING_MAXCOUNT

      private static final int IDLE_WARNING_MAXCOUNT
      See Also:
    • MAX_WRITE_BLOCKTIME_MS

      private final long MAX_WRITE_BLOCKTIME_MS
      See Also:
    • theClient

      private final WebServerClient theClient
    • rttBookKeeper

      private final RoundtripTimeBookkeeper rttBookKeeper
    • socket

      private Socket socket
    • writer

      private QueuedSocketWriter writer
    • lastPacketReceived

      private long lastPacketReceived
    • pingsTried

      private int pingsTried
    • pingCounter

      private int pingCounter
    • idleWarningsSent

      private int idleWarningsSent
    • connLostWarningLogged

      private boolean connLostWarningLogged
    • stopper

      private Thread stopper
    • forcedLogout

      private boolean forcedLogout
    • done

      private boolean done
    • toldToTerminate

      private boolean toldToTerminate
    • lastWasLogin

      private boolean lastWasLogin
  • Constructor Details

    • WebServerClientSocketThread

      public WebServerClientSocketThread(WebServerClient theClient, Socket socket)
  • Method Details

    • getClientInfo

      String getClientInfo()
    • createStopper

      public void createStopper(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 Runnable
      Overrides:
      run in class Thread
    • sendToClient

      public void sendToClient(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()
    • forceLogout

      protected void forceLogout(WebServerClientSocketThread other)
    • 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 -