Package net.sf.colossus.webserver
Class WebServerClientSocketThread
java.lang.Object
java.lang.Thread
net.sf.colossus.webserver.WebServerClientSocketThread
- All Implemented Interfaces:
Runnable
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
-
Nested Class Summary
Nested classes/interfaces inherited from class java.lang.Thread
Thread.Builder, Thread.State, Thread.UncaughtExceptionHandler
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate boolean
private boolean
private boolean
private static final int
private static final int
private int
private long
private boolean
(package private) static final Logger
private final long
private static final int
private static final long
private int
private int
private final RoundtripTimeBookkeeper
private Socket
private Thread
private final WebServerClient
private boolean
private QueuedSocketWriter
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionvoid
checkMaxIdleTime
(long now) Currently this will log out only older clients, because they do not respond to the ping packets.void
private void
void
void
Waits until writer has written all messagesprotected void
(package private) String
private void
void
requestPingIfNeeded
(long now) void
void
run()
prepare socket to read/write, and then loop as long as lines from client come, and parse themvoid
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.void
void
storeEntry
(long requestResponseArriveTime, long roundtripTime) Simply forward the RTT entry creation to the RTT bookkeepervoid
(package private) boolean
Methods inherited from class java.lang.Thread
activeCount, checkAccess, clone, countStackFrames, currentThread, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, isVirtual, join, join, join, join, ofPlatform, ofVirtual, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, sleep, start, startVirtualThread, stop, suspend, threadId, toString, yield
-
Field Details
-
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
-
rttBookKeeper
-
socket
-
writer
-
lastPacketReceived
private long lastPacketReceived -
pingsTried
private int pingsTried -
pingCounter
private int pingCounter -
idleWarningsSent
private int idleWarningsSent -
connLostWarningLogged
private boolean connLostWarningLogged -
stopper
-
forcedLogout
private boolean forcedLogout -
done
private boolean done -
toldToTerminate
private boolean toldToTerminate -
lastWasLogin
private boolean lastWasLogin
-
-
Constructor Details
-
WebServerClientSocketThread
-
-
Method Details
-
getClientInfo
String getClientInfo() -
createStopper
-
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 -
sendToClient
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 arrivedroundtripTime
- Actual roundtrip time
-
requestPingIfNeeded
public void requestPingIfNeeded(long now) -
requestPingNow
public void requestPingNow() -
markForcedLogout
private void markForcedLogout() -
wasForcedLogout
boolean wasForcedLogout() -
forceLogout
-
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
-
-