Package net.sf.colossus.webclient
Class WebClientSocketThread
- java.lang.Object
-
- java.lang.Thread
-
- net.sf.colossus.webclient.WebClientSocketThread
-
- All Implemented Interfaces:
java.lang.Runnable,IWebServer
public class WebClientSocketThread extends java.lang.Thread implements IWebServer
This implements the webserver/client communication at client side. It implements the server interface on client side; i.e. something server wanted to execute for a client, is read from the client socket input stream, parsed, and executed by the (WebClient)SocketThread. This also contains the methods which are called by the client (WebClient's GUI) and are sent over the socket to the server (note that those calls mostly happen in the EDT).- Author:
- Clemens Katzer
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private classWebClientSocketThread.AckWaiterclassWebClientSocketThread.WcstException
-
Field Summary
Fields Modifier and Type Field Description private WebClientSocketThread.AckWaiterackWaiterprivate java.nio.charset.Charsetcharsetprivate booleanclosingForcefullyToCancelprivate static java.lang.ObjectconnectOngoingMutexprivate static intcounterprivate static WebClientSocketThreadcurrentAttemptprivate java.lang.Stringemailprivate WebClientSocketThread.WcstExceptionfailedExceptionprivate booleanforceprivate java.util.HashMap<java.lang.String,GameInfo>gameHashprivate java.lang.Stringhostnameprivate java.io.BufferedReaderinprivate booleanloggedInprivate static java.util.logging.LoggerLOGGERprivate java.io.PrintWriteroutprivate java.lang.Stringpasswordprivate intportprivate static java.lang.Stringsepprivate java.net.Socketsocketprivate booleanstillNeedsRunprivate java.lang.Stringusernameprivate IWebClientwebClient-
Fields inherited from interface net.sf.colossus.webcommon.IWebServer
Cancel, ChangePassword, ChatSubmit, ConfirmCommand, ConfirmRegistration, DumpInfo, Echo, Enroll, generalChatName, LocallyGameOver, Login, Logout, PingResponse, Propose, RegisterUser, RequestUserAttention, RereadLoginMessage, ShutdownServer, Start, StartAtPlayer, StartedByPlayer, Unenroll, WatchGame, WebProtocolSeparator
-
-
Constructor Summary
Constructors Constructor Description WebClientSocketThread(IWebClient wcGUI, java.lang.String hostname, int port, java.lang.String username, java.lang.String password, boolean force, java.lang.String email, java.lang.String confCode, java.util.HashMap<java.lang.String,GameInfo> gameHash)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static voidcancelConnectAttempt()voidcancelGame(java.lang.String gameId, java.lang.String byUser)java.lang.StringchangeProperties(java.lang.String username, java.lang.String oldPW, java.lang.String newPW, java.lang.String email, java.lang.Boolean isAdminObj)voidchatSubmit(java.lang.String chatId, java.lang.String sender, java.lang.String message)private voidcloseSocketForcefully()private voidconfirm(java.lang.String confCode)Send the confirmation codevoidconfirmCommand(java.lang.String cmd, java.lang.String arg1, java.lang.String arg2, java.lang.String arg3)private voidconnect()voiddispose()private voiddoCleanup()voiddumpInfo()voidenrollUserToGame(java.lang.String gameId, java.lang.String username)WebClientSocketThread.WcstExceptiongetException()java.lang.StringgetOneLine()java.lang.StringgetUsername()private voidhandleAckNack(java.lang.String command, java.lang.String[] tokens)voidinformLocallyGameOver(java.lang.String gameId)voidinformStartedByPlayer(java.lang.String gameId)private voidlogin()voidlogout()voidpingResponse(java.lang.String arg1, java.lang.String arg2, java.lang.String arg3)GameInfoproposeGame(java.lang.String initiator, java.lang.String variant, java.lang.String viewmode, long startAt, int duration, java.lang.String summary, java.lang.String expire, boolean unlimitedMulligans, boolean balancedTowers, int min, int target, int max)private voidregister()Initial registration attemptvoidrequestUserAttention(long when, java.lang.String sender, boolean isAdmin, java.lang.String recipient, java.lang.String message, int beepCount, long beepInterval, boolean windows)voidrereadLoginMessage()private GameInforestoreGameInfo(java.lang.String[] tokens)voidrun()private voidsend(java.lang.String s)voidshutdownServer()voidsleepFor(long millis)voidstartGame(java.lang.String gameId, User byUser)voidstartGameOnPlayerHost(java.lang.String gameId, java.lang.String hostingPlayer, java.lang.String playerHost, int port)A game was started by a WebClient user locally on his computer and is ready to accept the other players as remote client; so we notify them and tell them host and port to where to connect.booleanstillNeedsRun()voidsubmitAnyText(java.lang.String text)voidunenrollUserFromGame(java.lang.String gameId, java.lang.String username)voidwatchGame(java.lang.String gameId, java.lang.String username)private voidwriteLog(java.lang.String s)-
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, join, join, join, onSpinWait, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, suspend, toString, yield
-
-
-
-
Field Detail
-
LOGGER
private static final java.util.logging.Logger LOGGER
-
webClient
private IWebClient webClient
-
gameHash
private final java.util.HashMap<java.lang.String,GameInfo> gameHash
-
hostname
private java.lang.String hostname
-
port
private final int port
-
username
private java.lang.String username
-
password
private java.lang.String password
-
force
private boolean force
-
email
private java.lang.String email
-
socket
private java.net.Socket socket
-
in
private java.io.BufferedReader in
-
out
private java.io.PrintWriter out
-
stillNeedsRun
private boolean stillNeedsRun
-
sep
private static final java.lang.String sep
- See Also:
- Constant Field Values
-
loggedIn
private boolean loggedIn
-
ackWaiter
private WebClientSocketThread.AckWaiter ackWaiter
-
failedException
private WebClientSocketThread.WcstException failedException
-
counter
private static int counter
-
currentAttempt
private static WebClientSocketThread currentAttempt
-
closingForcefullyToCancel
private boolean closingForcefullyToCancel
-
connectOngoingMutex
private static final java.lang.Object connectOngoingMutex
-
charset
private final java.nio.charset.Charset charset
-
-
Constructor Detail
-
WebClientSocketThread
public WebClientSocketThread(IWebClient wcGUI, java.lang.String hostname, int port, java.lang.String username, java.lang.String password, boolean force, java.lang.String email, java.lang.String confCode, java.util.HashMap<java.lang.String,GameInfo> gameHash)
-
-
Method Detail
-
getOneLine
public java.lang.String getOneLine() throws java.io.IOException- Throws:
java.io.IOException
-
getException
public WebClientSocketThread.WcstException getException()
-
cancelConnectAttempt
public static void cancelConnectAttempt()
-
closeSocketForcefully
private void closeSocketForcefully()
-
connect
private void connect() throws WebClientSocketThread.WcstException
-
register
private void register() throws WebClientSocketThread.WcstExceptionInitial registration attempt
-
confirm
private void confirm(java.lang.String confCode) throws WebClientSocketThread.WcstExceptionSend the confirmation code
-
login
private void login() throws WebClientSocketThread.WcstException
-
stillNeedsRun
public boolean stillNeedsRun()
-
getUsername
public java.lang.String getUsername()
-
run
public void run()
- Specified by:
runin interfacejava.lang.Runnable- Overrides:
runin classjava.lang.Thread
-
restoreGameInfo
private GameInfo restoreGameInfo(java.lang.String[] tokens)
-
doCleanup
private void doCleanup()
-
dispose
public void dispose()
-
send
private void send(java.lang.String s)
-
logout
public void logout()
- Specified by:
logoutin interfaceIWebServer
-
changeProperties
public java.lang.String changeProperties(java.lang.String username, java.lang.String oldPW, java.lang.String newPW, java.lang.String email, java.lang.Boolean isAdminObj)- Specified by:
changePropertiesin interfaceIWebServer
-
handleAckNack
private void handleAckNack(java.lang.String command, java.lang.String[] tokens)
-
proposeGame
public GameInfo proposeGame(java.lang.String initiator, java.lang.String variant, java.lang.String viewmode, long startAt, int duration, java.lang.String summary, java.lang.String expire, boolean unlimitedMulligans, boolean balancedTowers, int min, int target, int max)
- Specified by:
proposeGamein interfaceIWebServer
-
enrollUserToGame
public void enrollUserToGame(java.lang.String gameId, java.lang.String username)- Specified by:
enrollUserToGamein interfaceIWebServer
-
unenrollUserFromGame
public void unenrollUserFromGame(java.lang.String gameId, java.lang.String username)- Specified by:
unenrollUserFromGamein interfaceIWebServer
-
cancelGame
public void cancelGame(java.lang.String gameId, java.lang.String byUser)- Specified by:
cancelGamein interfaceIWebServer
-
startGame
public void startGame(java.lang.String gameId, User byUser)- Specified by:
startGamein interfaceIWebServer
-
informStartedByPlayer
public void informStartedByPlayer(java.lang.String gameId)
- Specified by:
informStartedByPlayerin interfaceIWebServer
-
informLocallyGameOver
public void informLocallyGameOver(java.lang.String gameId)
- Specified by:
informLocallyGameOverin interfaceIWebServer
-
startGameOnPlayerHost
public void startGameOnPlayerHost(java.lang.String gameId, java.lang.String hostingPlayer, java.lang.String playerHost, int port)Description copied from interface:IWebServerA game was started by a WebClient user locally on his computer and is ready to accept the other players as remote client; so we notify them and tell them host and port to where to connect.- Specified by:
startGameOnPlayerHostin interfaceIWebServer
-
chatSubmit
public void chatSubmit(java.lang.String chatId, java.lang.String sender, java.lang.String message)- Specified by:
chatSubmitin interfaceIWebServer
-
pingResponse
public void pingResponse(java.lang.String arg1, java.lang.String arg2, java.lang.String arg3)
-
watchGame
public void watchGame(java.lang.String gameId, java.lang.String username)- Specified by:
watchGamein interfaceIWebServer
-
sleepFor
public void sleepFor(long millis)
-
confirmCommand
public void confirmCommand(java.lang.String cmd, java.lang.String arg1, java.lang.String arg2, java.lang.String arg3)
-
requestUserAttention
public void requestUserAttention(long when, java.lang.String sender, boolean isAdmin, java.lang.String recipient, java.lang.String message, int beepCount, long beepInterval, boolean windows)- Specified by:
requestUserAttentionin interfaceIWebServer
-
shutdownServer
public void shutdownServer()
- Specified by:
shutdownServerin interfaceIWebServer
-
rereadLoginMessage
public void rereadLoginMessage()
- Specified by:
rereadLoginMessagein interfaceIWebServer
-
dumpInfo
public void dumpInfo()
- Specified by:
dumpInfoin interfaceIWebServer
-
submitAnyText
public void submitAnyText(java.lang.String text)
-
writeLog
private void writeLog(java.lang.String s)
-
-