Package net.sf.colossus.client
Class SocketClientThread
- java.lang.Object
-
- java.lang.Thread
-
- net.sf.colossus.client.SocketClientThread
-
- All Implemented Interfaces:
java.lang.Runnable,IServerConnection,IServer
final class SocketClientThread extends java.lang.Thread implements IServer, IServerConnection
Thread to handle server connection on client side.- Author:
- David Ripton
-
-
Field Summary
Fields Modifier and Type Field Description private booleanabandonedprivate ClientThreadclientThreadprivate ClientThreaddisposedClientThreadprivate booleangoingDownprivate java.lang.StringhostThose are stored at the moment only to be able to reconnectprivate java.io.BufferedReaderinprivate java.lang.StringinitialLineprivate booleaninternalSpectatorprivate booleanisWaitingprivate java.lang.ObjectisWaitingLockprivate static java.util.logging.LoggerLOGGERprivate java.io.PrintWriteroutprivate intownMessageCounterprivate java.lang.StringplayerNameprivate intportprivate java.util.Collection<java.lang.String>preliminaryPlayerNamesprivate java.lang.StringreasonFailprivate booleanremoteprivate booleanselfInterruptedprivate static java.lang.Stringsepprivate booleanserverReceiveTimedoutprivate java.net.Socketsocketprivate booleanspectatorprivate java.lang.StringvariantNameForInit-
Fields inherited from interface net.sf.colossus.server.IServer
CLIENT_VERSION, CLIENT_VERSION_CAN_HANDLE_NAK, CLIENT_VERSION_CAN_RECONNECT, CLIENT_VERSION_UNDERSTANDS_PING, CLIENT_VERSION_VARIANT_XML_OK, MINIMUM_CLIENT_VERSION
-
-
Constructor Summary
Constructors Constructor Description SocketClientThread(java.lang.String host, int port, java.lang.String initialName, boolean isRemote, boolean spectator)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description intabandonAndGetMessageCounter()voidacquireAngel(Legion legion, CreatureType angelType)voidappendToConnectionLog(java.lang.String s)voidapplyCarries(BattleHex hex)voidassignColor(PlayerColor color)voidassignFirstMarker(java.lang.String markerId)voidassignStrikePenalty(java.lang.String prompt)private voidcallMethod(java.lang.String method, java.util.List<java.lang.String> args)voidcheckServerConnection()private voidcleanupSocket()voidclientConfirmedCatchup()voidconcede(Legion legion)static SocketClientThreadcreateConnection(java.lang.String host, int port, java.lang.String initialName, boolean remote, boolean spectator)voiddoBattleMove(int tag, BattleHex hex)voiddoMove(Legion legion, MasterHex hex, EntrySide entrySide, boolean teleport, CreatureType teleportingLord)voiddoneWithBattleMoves()voiddoneWithEngagements()voiddoneWithMoves()voiddoneWithRecruits()voiddoneWithSplits()voiddoneWithStrikes()voiddoNotConcede(Legion legion)voiddoNotFlee(Legion legion)voiddoRecruit(Recruitment event)voiddoSplit(Legion parent, java.lang.String childMarker, java.util.List<CreatureType> creaturesToSplit)Executes a split of certain creatures from a legion.voiddoSummon(Summoning event)Handles a summon eventvoidenforcedConnectionException()voidengage(MasterHex hex)voidfight(MasterHex hex)voidflee(Legion legion)intgetDisposedQueueLen()IServergetIServer()java.util.Collection<java.lang.String>getPreliminaryPlayerNames()private java.lang.StringgetPrintName()java.lang.StringgetReasonFail()java.lang.StringgetVariantNameForInit()voidinterrupt()booleanisAlreadyDown()voidjoinGame(java.lang.String playerName)voidleaveCarryMode()voidloadGame(java.lang.String filename)voidmakeProposal(java.lang.String proposalString)voidmulligan()voidnewGame()private voidparseLine(java.lang.String s)private voidreadAndParseUntilDone()private java.lang.StringreadOneLine()protected static SocketClientThreadrecreateConnection(IServerConnection prevConnection)voidreplyToPing()private voidrequestGameInfo()voidrequestSyncDelta(int msgNr, int syncCounter)voidrun()voidsaveGame(java.lang.String filename)voidsendDisconnect()private voidsendToServer(java.lang.String message)voidsetClient(Client client)private voidsetWaiting(boolean val)private voidsignOn(java.lang.String loginName, boolean isRemote, int version, java.lang.String buildInfo, boolean spectator)voidstartThread()voidstopGame()voidstopSocketClientThread(boolean sendConnect)Client originates the dispose: If done because all is over, player chose close etc, send also a disconnect so that server knows client is "gone".voidstrike(int tag, BattleHex hex)voidundoBattleMove(BattleHex hex)voidundoMove(Legion legion)voidundoRecruit(Legion legion)voidundoSplit(Legion splitoff)voidupdatePlayerName(java.lang.String playerName)private java.lang.StringwaitForGameInfo()private java.lang.StringwaitForLine()voidwaitForPrompt()private java.lang.StringwaitForSignonOk()voidwatchGame()voidwithdrawFromGame()-
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, 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
-
clientThread
private ClientThread clientThread
-
disposedClientThread
private ClientThread disposedClientThread
-
socket
private java.net.Socket socket
-
in
private java.io.BufferedReader in
-
out
private java.io.PrintWriter out
-
goingDown
private boolean goingDown
-
selfInterrupted
private boolean selfInterrupted
-
serverReceiveTimedout
private boolean serverReceiveTimedout
-
host
private java.lang.String host
Those are stored at the moment only to be able to reconnect
-
port
private int port
-
playerName
private java.lang.String playerName
-
remote
private boolean remote
-
spectator
private boolean spectator
-
internalSpectator
private final boolean internalSpectator
-
sep
private static final java.lang.String sep
- See Also:
- Constant Field Values
-
reasonFail
private java.lang.String reasonFail
-
initialLine
private java.lang.String initialLine
-
variantNameForInit
private java.lang.String variantNameForInit
-
preliminaryPlayerNames
private java.util.Collection<java.lang.String> preliminaryPlayerNames
-
isWaitingLock
private final java.lang.Object isWaitingLock
-
isWaiting
private boolean isWaiting
-
ownMessageCounter
private int ownMessageCounter
-
abandoned
private boolean abandoned
-
-
Method Detail
-
createConnection
public static SocketClientThread createConnection(java.lang.String host, int port, java.lang.String initialName, boolean remote, boolean spectator) throws Client.ConnectionInitException
- Throws:
Client.ConnectionInitException
-
recreateConnection
protected static SocketClientThread recreateConnection(IServerConnection prevConnection) throws Client.ConnectionInitException
- Throws:
Client.ConnectionInitException
-
readOneLine
private java.lang.String readOneLine() throws java.io.IOException- Throws:
java.io.IOException
-
waitForPrompt
public void waitForPrompt() throws java.net.SocketTimeoutException, java.net.SocketException, java.io.IOException- Throws:
java.net.SocketTimeoutExceptionjava.net.SocketExceptionjava.io.IOException
-
waitForSignonOk
private java.lang.String waitForSignonOk() throws java.io.IOException- Throws:
java.io.IOException
-
waitForGameInfo
private java.lang.String waitForGameInfo() throws java.io.IOException- Throws:
java.io.IOException
-
getReasonFail
public java.lang.String getReasonFail()
- Specified by:
getReasonFailin interfaceIServerConnection
-
appendToConnectionLog
public void appendToConnectionLog(java.lang.String s)
-
getVariantNameForInit
public java.lang.String getVariantNameForInit()
- Specified by:
getVariantNameForInitin interfaceIServerConnection
-
getPreliminaryPlayerNames
public java.util.Collection<java.lang.String> getPreliminaryPlayerNames()
- Specified by:
getPreliminaryPlayerNamesin interfaceIServerConnection
-
getIServer
public IServer getIServer()
- Specified by:
getIServerin interfaceIServerConnection
-
setClient
public void setClient(Client client)
- Specified by:
setClientin interfaceIServerConnection
-
getDisposedQueueLen
public int getDisposedQueueLen()
- Specified by:
getDisposedQueueLenin interfaceIServerConnection
-
startThread
public void startThread()
- Specified by:
startThreadin interfaceIServerConnection
-
run
public void run()
- Specified by:
runin interfacejava.lang.Runnable- Overrides:
runin classjava.lang.Thread
-
readAndParseUntilDone
private void readAndParseUntilDone()
-
setWaiting
private void setWaiting(boolean val)
-
waitForLine
private java.lang.String waitForLine()
-
isAlreadyDown
public boolean isAlreadyDown()
- Specified by:
isAlreadyDownin interfaceIServerConnection
-
cleanupSocket
private void cleanupSocket()
-
interrupt
public void interrupt()
- Overrides:
interruptin classjava.lang.Thread
-
stopSocketClientThread
public void stopSocketClientThread(boolean sendConnect)
Client originates the dispose: If done because all is over, player chose close etc, send also a disconnect so that server knows client is "gone". If done because of actually or suspected "connection dead/problems", just shut down the SCT peacefully, do not inform server, client might want to reconnect later with a new SCT / ClientThread pair.- Specified by:
stopSocketClientThreadin interfaceIServerConnection- Parameters:
sendConnect- If true, sends a disconnect message to server
-
abandonAndGetMessageCounter
public int abandonAndGetMessageCounter()
- Specified by:
abandonAndGetMessageCounterin interfaceIServerConnection
-
parseLine
private void parseLine(java.lang.String s)
-
callMethod
private void callMethod(java.lang.String method, java.util.List<java.lang.String> args)
-
getPrintName
private java.lang.String getPrintName()
-
sendToServer
private void sendToServer(java.lang.String message)
-
signOn
private void signOn(java.lang.String loginName, boolean isRemote, int version, java.lang.String buildInfo, boolean spectator)
-
requestGameInfo
private void requestGameInfo()
-
updatePlayerName
public void updatePlayerName(java.lang.String playerName)
- Specified by:
updatePlayerNamein interfaceIServerConnection
-
leaveCarryMode
public void leaveCarryMode()
- Specified by:
leaveCarryModein interfaceIServer
-
doneWithBattleMoves
public void doneWithBattleMoves()
- Specified by:
doneWithBattleMovesin interfaceIServer
-
doneWithStrikes
public void doneWithStrikes()
- Specified by:
doneWithStrikesin interfaceIServer
-
acquireAngel
public void acquireAngel(Legion legion, CreatureType angelType)
- Specified by:
acquireAngelin interfaceIServer
-
doSummon
public void doSummon(Summoning event)
Description copied from interface:IServerHandles a summon event
-
doRecruit
public void doRecruit(Recruitment event)
-
doNotConcede
public void doNotConcede(Legion legion)
- Specified by:
doNotConcedein interfaceIServer
-
makeProposal
public void makeProposal(java.lang.String proposalString)
- Specified by:
makeProposalin interfaceIServer
-
doBattleMove
public void doBattleMove(int tag, BattleHex hex)- Specified by:
doBattleMovein interfaceIServer
-
applyCarries
public void applyCarries(BattleHex hex)
- Specified by:
applyCarriesin interfaceIServer
-
undoBattleMove
public void undoBattleMove(BattleHex hex)
- Specified by:
undoBattleMovein interfaceIServer
-
assignStrikePenalty
public void assignStrikePenalty(java.lang.String prompt)
- Specified by:
assignStrikePenaltyin interfaceIServer
-
undoRecruit
public void undoRecruit(Legion legion)
- Specified by:
undoRecruitin interfaceIServer
-
doneWithSplits
public void doneWithSplits()
- Specified by:
doneWithSplitsin interfaceIServer
-
doneWithMoves
public void doneWithMoves()
- Specified by:
doneWithMovesin interfaceIServer
-
doneWithEngagements
public void doneWithEngagements()
- Specified by:
doneWithEngagementsin interfaceIServer
-
doneWithRecruits
public void doneWithRecruits()
- Specified by:
doneWithRecruitsin interfaceIServer
-
withdrawFromGame
public void withdrawFromGame()
- Specified by:
withdrawFromGamein interfaceIServer
-
sendDisconnect
public void sendDisconnect()
- Specified by:
sendDisconnectin interfaceIServer
-
doSplit
public void doSplit(Legion parent, java.lang.String childMarker, java.util.List<CreatureType> creaturesToSplit)
Description copied from interface:IServerExecutes a split of certain creatures from a legion.
-
doMove
public void doMove(Legion legion, MasterHex hex, EntrySide entrySide, boolean teleport, CreatureType teleportingLord)
-
assignColor
public void assignColor(PlayerColor color)
- Specified by:
assignColorin interfaceIServer
-
assignFirstMarker
public void assignFirstMarker(java.lang.String markerId)
- Specified by:
assignFirstMarkerin interfaceIServer
-
loadGame
public void loadGame(java.lang.String filename)
-
saveGame
public void saveGame(java.lang.String filename)
-
checkServerConnection
public void checkServerConnection()
- Specified by:
checkServerConnectionin interfaceIServer
-
clientConfirmedCatchup
public void clientConfirmedCatchup()
- Specified by:
clientConfirmedCatchupin interfaceIServer
-
joinGame
public void joinGame(java.lang.String playerName)
-
requestSyncDelta
public void requestSyncDelta(int msgNr, int syncCounter)- Specified by:
requestSyncDeltain interfaceIServerConnection
-
replyToPing
public void replyToPing()
-
enforcedConnectionException
public void enforcedConnectionException()
- Specified by:
enforcedConnectionExceptionin interfaceIServerConnection
-
-