net.sf.colossus.webserver
Class WebServerClientSocketThread
java.lang.Object
java.lang.Thread
net.sf.colossus.webserver.WebServerClientSocketThread
- All Implemented Interfaces:
- java.lang.Runnable, IWebClient
public class WebServerClientSocketThread
- extends java.lang.Thread
- implements IWebClient
Thread to handle one user client connection at the webserver
Reads always one line from the socket, parses it and
executes the corresponding action.
This class also provides the methods which the server calls
on the client (=translates method calls to sending them as text
messages over the socket).
- Author:
- Clemens Katzer
Nested classes/interfaces inherited from class java.lang.Thread |
java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler |
Fields inherited from class java.lang.Thread |
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY |
Fields inherited from interface net.sf.colossus.webcommon.IWebClient |
alreadyLoggedIn, chatDeliver, connectionClosed, didEnroll, didUnenroll, forcedLogout, gameCancelled, gameInfo, gameStarted, gameStartsNow, gameStartsSoon, generalMessage, grantAdmin, pingRequest, requestAttention, tooManyUsers, userInfo |
Method Summary |
void |
chatDeliver(java.lang.String chatId,
long when,
java.lang.String sender,
java.lang.String message,
boolean resent)
|
void |
checkMaxIdleTime(long now)
Currently this will log out only older clients, because they do not
respond to the ping packets. |
void |
connectionReset(boolean forcedLogout)
|
void |
deliverGeneralMessage(long when,
boolean error,
java.lang.String title,
java.lang.String message)
|
void |
didEnroll(java.lang.String gameId,
java.lang.String username)
|
void |
didUnenroll(java.lang.String gameId,
java.lang.String username)
|
protected void |
forceLogout(WebServerClientSocketThread other)
|
void |
gameCancelled(java.lang.String gameId,
java.lang.String byUser)
|
void |
gameInfo(GameInfo gi)
|
void |
gameStartsNow(java.lang.String gameId,
int port,
java.lang.String hostingHost)
|
void |
gameStartsSoon(java.lang.String gameId,
java.lang.String byUser)
|
int |
getClientVersion()
|
(package private) User |
getUser()
|
private java.lang.String |
getUsername()
|
void |
grantAdminStatus()
|
void |
interrupt()
|
private boolean |
parseLine(java.lang.String fromClient)
|
static void |
reject(java.net.Socket socket)
|
void |
requestAttention(long when,
java.lang.String byUser,
boolean byAdmin,
java.lang.String message,
int beepCount,
long beepInterval,
boolean windows)
|
void |
requestPing(java.lang.String arg1,
java.lang.String arg2,
java.lang.String arg3)
|
void |
requestPingIfNeeded(long now)
|
void |
run()
prepare socket to read/write, and then loop as long
as lines from client come, and parse them |
private void |
sendToClient(java.lang.String s)
|
void |
tellToTerminate()
|
void |
userInfo(int loggedin,
int enrolled,
int playing,
int dead,
long ago,
java.lang.String text)
|
Methods inherited from class java.lang.Thread |
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield |
Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait |
LOGGER
private static final java.util.logging.Logger LOGGER
server
private WebServer server
socket
private java.net.Socket socket
is
private java.io.InputStream is
in
private java.io.BufferedReader in
out
private java.io.PrintWriter out
user
private User user
clientVersion
private int clientVersion
lastPacketReceived
private long lastPacketReceived
pingsTried
private int pingsTried
idleWarningsSent
private int idleWarningsSent
loggedIn
private boolean loggedIn
sep
private static final java.lang.String sep
- See Also:
- Constant Field Values
stopper
private java.lang.Thread stopper
PING_REQUEST_INTERVAL_SECONDS
private static final long PING_REQUEST_INTERVAL_SECONDS
- See Also:
- Constant Field Values
PING_MAX_TRIES
private static final int PING_MAX_TRIES
- See Also:
- Constant Field Values
IDLE_WARNING_INTERVAL_MINUTES
private static final int IDLE_WARNING_INTERVAL_MINUTES
- See Also:
- Constant Field Values
IDLE_WARNING_MAXCOUNT
private static final int IDLE_WARNING_MAXCOUNT
- See Also:
- Constant Field Values
unverifiedUsername
private java.lang.String unverifiedUsername
done
private boolean done
WebServerClientSocketThread
public WebServerClientSocketThread(WebServer server,
java.net.Socket socket)
reject
public static void reject(java.net.Socket socket)
getUser
User getUser()
getUsername
private java.lang.String getUsername()
getClientVersion
public int getClientVersion()
- Specified by:
getClientVersion
in interface IWebClient
requestPingIfNeeded
public void requestPingIfNeeded(long now)
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
-
tellToTerminate
public void tellToTerminate()
interrupt
public void interrupt()
- Overrides:
interrupt
in class java.lang.Thread
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
parseLine
private boolean parseLine(java.lang.String fromClient)
forceLogout
protected void forceLogout(WebServerClientSocketThread other)
sendToClient
private void sendToClient(java.lang.String s)
grantAdminStatus
public void grantAdminStatus()
- Specified by:
grantAdminStatus
in interface IWebClient
didEnroll
public void didEnroll(java.lang.String gameId,
java.lang.String username)
- Specified by:
didEnroll
in interface IWebClient
didUnenroll
public void didUnenroll(java.lang.String gameId,
java.lang.String username)
- Specified by:
didUnenroll
in interface IWebClient
gameCancelled
public void gameCancelled(java.lang.String gameId,
java.lang.String byUser)
- Specified by:
gameCancelled
in interface IWebClient
userInfo
public void userInfo(int loggedin,
int enrolled,
int playing,
int dead,
long ago,
java.lang.String text)
- Specified by:
userInfo
in interface IWebClient
gameInfo
public void gameInfo(GameInfo gi)
- Specified by:
gameInfo
in interface IWebClient
gameStartsSoon
public void gameStartsSoon(java.lang.String gameId,
java.lang.String byUser)
- Specified by:
gameStartsSoon
in interface IWebClient
gameStartsNow
public void gameStartsNow(java.lang.String gameId,
int port,
java.lang.String hostingHost)
- Specified by:
gameStartsNow
in interface IWebClient
chatDeliver
public void chatDeliver(java.lang.String chatId,
long when,
java.lang.String sender,
java.lang.String message,
boolean resent)
- Specified by:
chatDeliver
in interface IWebClient
deliverGeneralMessage
public void deliverGeneralMessage(long when,
boolean error,
java.lang.String title,
java.lang.String message)
- Specified by:
deliverGeneralMessage
in interface IWebClient
requestAttention
public void requestAttention(long when,
java.lang.String byUser,
boolean byAdmin,
java.lang.String message,
int beepCount,
long beepInterval,
boolean windows)
- Specified by:
requestAttention
in interface IWebClient
requestPing
public void requestPing(java.lang.String arg1,
java.lang.String arg2,
java.lang.String arg3)
connectionReset
public void connectionReset(boolean forcedLogout)
- Specified by:
connectionReset
in interface IWebClient