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 boolean
abandoned
private ClientThread
clientThread
private ClientThread
disposedClientThread
private boolean
goingDown
private java.lang.String
host
Those are stored at the moment only to be able to reconnectprivate java.io.BufferedReader
in
private java.lang.String
initialLine
private boolean
internalSpectator
private boolean
isWaiting
private java.lang.Object
isWaitingLock
private static java.util.logging.Logger
LOGGER
private java.io.PrintWriter
out
private int
ownMessageCounter
private java.lang.String
playerName
private int
port
private java.util.Collection<java.lang.String>
preliminaryPlayerNames
private java.lang.String
reasonFail
private boolean
remote
private boolean
selfInterrupted
private static java.lang.String
sep
private boolean
serverReceiveTimedout
private java.net.Socket
socket
private boolean
spectator
private java.lang.String
variantNameForInit
-
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 int
abandonAndGetMessageCounter()
void
acquireAngel(Legion legion, CreatureType angelType)
void
appendToConnectionLog(java.lang.String s)
void
applyCarries(BattleHex hex)
void
assignColor(PlayerColor color)
void
assignFirstMarker(java.lang.String markerId)
void
assignStrikePenalty(java.lang.String prompt)
private void
callMethod(java.lang.String method, java.util.List<java.lang.String> args)
void
checkServerConnection()
private void
cleanupSocket()
void
clientConfirmedCatchup()
void
concede(Legion legion)
static SocketClientThread
createConnection(java.lang.String host, int port, java.lang.String initialName, boolean remote, boolean spectator)
void
doBattleMove(int tag, BattleHex hex)
void
doMove(Legion legion, MasterHex hex, EntrySide entrySide, boolean teleport, CreatureType teleportingLord)
void
doneWithBattleMoves()
void
doneWithEngagements()
void
doneWithMoves()
void
doneWithRecruits()
void
doneWithSplits()
void
doneWithStrikes()
void
doNotConcede(Legion legion)
void
doNotFlee(Legion legion)
void
doRecruit(Recruitment event)
void
doSplit(Legion parent, java.lang.String childMarker, java.util.List<CreatureType> creaturesToSplit)
Executes a split of certain creatures from a legion.void
doSummon(Summoning event)
Handles a summon eventvoid
enforcedConnectionException()
void
engage(MasterHex hex)
void
fight(MasterHex hex)
void
flee(Legion legion)
int
getDisposedQueueLen()
IServer
getIServer()
java.util.Collection<java.lang.String>
getPreliminaryPlayerNames()
private java.lang.String
getPrintName()
java.lang.String
getReasonFail()
java.lang.String
getVariantNameForInit()
void
interrupt()
boolean
isAlreadyDown()
void
joinGame(java.lang.String playerName)
void
leaveCarryMode()
void
loadGame(java.lang.String filename)
void
makeProposal(java.lang.String proposalString)
void
mulligan()
void
newGame()
private void
parseLine(java.lang.String s)
private void
readAndParseUntilDone()
private java.lang.String
readOneLine()
protected static SocketClientThread
recreateConnection(IServerConnection prevConnection)
void
replyToPing()
private void
requestGameInfo()
void
requestSyncDelta(int msgNr, int syncCounter)
void
run()
void
saveGame(java.lang.String filename)
void
sendDisconnect()
private void
sendToServer(java.lang.String message)
void
setClient(Client client)
private void
setWaiting(boolean val)
private void
signOn(java.lang.String loginName, boolean isRemote, int version, java.lang.String buildInfo, boolean spectator)
void
startThread()
void
stopGame()
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".void
strike(int tag, BattleHex hex)
void
undoBattleMove(BattleHex hex)
void
undoMove(Legion legion)
void
undoRecruit(Legion legion)
void
undoSplit(Legion splitoff)
void
updatePlayerName(java.lang.String playerName)
private java.lang.String
waitForGameInfo()
private java.lang.String
waitForLine()
void
waitForPrompt()
private java.lang.String
waitForSignonOk()
void
watchGame()
void
withdrawFromGame()
-
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.SocketTimeoutException
java.net.SocketException
java.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:
getReasonFail
in interfaceIServerConnection
-
appendToConnectionLog
public void appendToConnectionLog(java.lang.String s)
-
getVariantNameForInit
public java.lang.String getVariantNameForInit()
- Specified by:
getVariantNameForInit
in interfaceIServerConnection
-
getPreliminaryPlayerNames
public java.util.Collection<java.lang.String> getPreliminaryPlayerNames()
- Specified by:
getPreliminaryPlayerNames
in interfaceIServerConnection
-
getIServer
public IServer getIServer()
- Specified by:
getIServer
in interfaceIServerConnection
-
setClient
public void setClient(Client client)
- Specified by:
setClient
in interfaceIServerConnection
-
getDisposedQueueLen
public int getDisposedQueueLen()
- Specified by:
getDisposedQueueLen
in interfaceIServerConnection
-
startThread
public void startThread()
- Specified by:
startThread
in interfaceIServerConnection
-
run
public void run()
- Specified by:
run
in interfacejava.lang.Runnable
- Overrides:
run
in 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:
isAlreadyDown
in interfaceIServerConnection
-
cleanupSocket
private void cleanupSocket()
-
interrupt
public void interrupt()
- Overrides:
interrupt
in 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:
stopSocketClientThread
in interfaceIServerConnection
- Parameters:
sendConnect
- If true, sends a disconnect message to server
-
abandonAndGetMessageCounter
public int abandonAndGetMessageCounter()
- Specified by:
abandonAndGetMessageCounter
in 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:
updatePlayerName
in interfaceIServerConnection
-
leaveCarryMode
public void leaveCarryMode()
- Specified by:
leaveCarryMode
in interfaceIServer
-
doneWithBattleMoves
public void doneWithBattleMoves()
- Specified by:
doneWithBattleMoves
in interfaceIServer
-
doneWithStrikes
public void doneWithStrikes()
- Specified by:
doneWithStrikes
in interfaceIServer
-
acquireAngel
public void acquireAngel(Legion legion, CreatureType angelType)
- Specified by:
acquireAngel
in interfaceIServer
-
doSummon
public void doSummon(Summoning event)
Description copied from interface:IServer
Handles a summon event
-
doRecruit
public void doRecruit(Recruitment event)
-
doNotConcede
public void doNotConcede(Legion legion)
- Specified by:
doNotConcede
in interfaceIServer
-
makeProposal
public void makeProposal(java.lang.String proposalString)
- Specified by:
makeProposal
in interfaceIServer
-
doBattleMove
public void doBattleMove(int tag, BattleHex hex)
- Specified by:
doBattleMove
in interfaceIServer
-
applyCarries
public void applyCarries(BattleHex hex)
- Specified by:
applyCarries
in interfaceIServer
-
undoBattleMove
public void undoBattleMove(BattleHex hex)
- Specified by:
undoBattleMove
in interfaceIServer
-
assignStrikePenalty
public void assignStrikePenalty(java.lang.String prompt)
- Specified by:
assignStrikePenalty
in interfaceIServer
-
undoRecruit
public void undoRecruit(Legion legion)
- Specified by:
undoRecruit
in interfaceIServer
-
doneWithSplits
public void doneWithSplits()
- Specified by:
doneWithSplits
in interfaceIServer
-
doneWithMoves
public void doneWithMoves()
- Specified by:
doneWithMoves
in interfaceIServer
-
doneWithEngagements
public void doneWithEngagements()
- Specified by:
doneWithEngagements
in interfaceIServer
-
doneWithRecruits
public void doneWithRecruits()
- Specified by:
doneWithRecruits
in interfaceIServer
-
withdrawFromGame
public void withdrawFromGame()
- Specified by:
withdrawFromGame
in interfaceIServer
-
sendDisconnect
public void sendDisconnect()
- Specified by:
sendDisconnect
in interfaceIServer
-
doSplit
public void doSplit(Legion parent, java.lang.String childMarker, java.util.List<CreatureType> creaturesToSplit)
Description copied from interface:IServer
Executes 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:
assignColor
in interfaceIServer
-
assignFirstMarker
public void assignFirstMarker(java.lang.String markerId)
- Specified by:
assignFirstMarker
in interfaceIServer
-
loadGame
public void loadGame(java.lang.String filename)
-
saveGame
public void saveGame(java.lang.String filename)
-
checkServerConnection
public void checkServerConnection()
- Specified by:
checkServerConnection
in interfaceIServer
-
clientConfirmedCatchup
public void clientConfirmedCatchup()
- Specified by:
clientConfirmedCatchup
in interfaceIServer
-
joinGame
public void joinGame(java.lang.String playerName)
-
requestSyncDelta
public void requestSyncDelta(int msgNr, int syncCounter)
- Specified by:
requestSyncDelta
in interfaceIServerConnection
-
replyToPing
public void replyToPing()
-
enforcedConnectionException
public void enforcedConnectionException()
- Specified by:
enforcedConnectionException
in interfaceIServerConnection
-
-