public final class Server extends java.lang.Thread implements IServer
Modifier and Type | Class and Description |
---|---|
class |
Server.WithdrawInfo |
Modifier and Type | Field and Description |
---|---|
private java.nio.channels.SelectionKey |
acceptKey |
private java.util.List<java.nio.channels.SocketChannel> |
activeSocketChannelList |
private java.nio.ByteBuffer |
byteBuffer |
private java.lang.String |
caughtUpAction |
private java.util.List<ClientHandler> |
channelChanges |
private java.util.List<IClient> |
clients
Maybe also save things like the originating IP, in case a
connection breaks and we need to authenticate reconnects.
|
private boolean |
disposeAllClientsDone |
private java.lang.Object |
disposeAllClientsDoneMutex |
private static java.lang.Thread |
fileServerThread |
private java.util.Map<java.lang.String,Server.WithdrawInfo> |
forcedWithdraws |
private boolean |
forceShutDown |
private GameServerSide |
game |
private int |
gameStartupTimeoutSecs
Timeout how long server waits for clients before giving up;
in normal/local games 0, meaning forever;
in public server usage set to WEBGAMES_STARTUP_TIMEOUT_SECS
|
private java.lang.Object |
guiRequestMutex |
private java.lang.String |
guiRequestSaveFilename |
private boolean |
guiRequestSaveFlag |
private boolean |
initiateDisposal |
private boolean |
inPauseState |
private long |
lastPingRound
How many ms ago last ping round was done.
|
private static java.util.logging.Logger |
LOGGER |
private boolean |
obsolete |
(package private) ClientHandler |
overriddenCH |
private int |
PING_REQUEST_INTERVAL_SEC |
private java.util.Map<Player,IClient> |
playerToClientMap
Map of players to their clients.
|
private int |
port
Server socket port.
|
(package private) ClientHandler |
processingCH |
private MessageRecorder |
recorder |
private java.util.List<IClient> |
remoteClients |
private java.util.List<RemoteLogHandler> |
remoteLogHandlers |
private java.util.List<java.lang.String> |
rolls |
private java.nio.channels.Selector |
selector |
private boolean |
sendPingRequests
Will be set to true after all clients are properly connected
|
private boolean |
serverRunning |
private java.net.ServerSocket |
serverSocket |
private boolean |
shuttingDown |
private java.util.List<IClient> |
spectatorClients |
private int |
spectators |
private long |
startInititatedTime
When server started to listed for clients
|
private static StartupProgress |
startLog |
private boolean |
stopAcceptingFlag |
private int |
strikeNumber |
private CreatureServerSide |
striker |
private CreatureServerSide |
target |
private int |
timeoutDuringGame |
private int |
timeoutDuringShutdown |
private int |
timeoutDuringStart |
private int |
waitingForPlayers
Number of player clients we're waiting for to *connect*
|
private int |
waitingForPlayersToJoin
Number of player clients we're waiting for to *join*
- when last one has joined, then kick of newGame2() or loadGame2()
|
private java.util.HashSet<IClient> |
waitingToCatchup |
private java.lang.Object |
waitUntilOverMutex |
private static int |
WEBGAMES_STARTUP_TIMEOUT_SECS
How long in public server games socket shall wait for Clients.
|
private java.lang.Object |
wfptjSemaphor
Semaphor for synchronized access to waitingForPlayersToJoin
|
private WhatNextManager |
whatNextManager |
CLIENT_VERSION, CLIENT_VERSION_CAN_RECONNECT, CLIENT_VERSION_UNDERSTANDS_PING, MINIMUM_CLIENT_VERSION
Constructor and Description |
---|
Server(GameServerSide game,
WhatNextManager whatNextMgr,
int port) |
Modifier and Type | Method and Description |
---|---|
void |
acquireAngel(Legion legion,
CreatureType angelType) |
private void |
actOnAllCaughtUp() |
(package private) java.lang.String |
addClient(IClient client,
java.lang.String playerName,
boolean remote,
int clientVersion,
java.lang.String buildInfo)
Add a Client.
|
private void |
addRemoteClient(IClient client,
Player player) |
(package private) void |
allCleanupBattle() |
(package private) void |
allFullyUpdateAllLegionContents(java.lang.String reason) |
(package private) void |
allFullyUpdateLegionStatus() |
(package private) void |
allInitBattle(MasterHex masterHex) |
(package private) void |
allInitBoard() |
(package private) void |
allLog(java.lang.String message)
DO NOT USE:
package so that it can be called from Log4J Appender.
|
(package private) void |
allPlaceNewChit(CreatureServerSide critter) |
(package private) void |
allRemoveDeadBattleChits() |
(package private) void |
allRemoveLegion(Legion legion) |
(package private) void |
allRequestConfirmCatchup(java.lang.String action,
boolean skipInTrouble) |
(package private) void |
allRequestPingIfNeeded()
IF last ping round is at least PING_REQUEST_INTERVAL_SEC seconds ago,
then send a ping request to all clients (except those which are in
trouble anyway).
|
(package private) void |
allRevealCreatures(Legion legion,
java.util.List<CreatureType> creatureNames,
java.lang.String reason) |
(package private) void |
allRevealEngagedLegion(Legion legion,
boolean isAttacker,
java.lang.String reason)
pass to all clients the 'revealEngagedCreatures' message,
then fire an 'revealEvent' to the history.
|
(package private) void |
allRevealLegion(Legion legion,
java.util.List<CreatureType> creatures,
java.lang.String reason)
Call from History during load game only
|
(package private) void |
allRevealLegion(Legion legion,
java.lang.String reason) |
(package private) void |
allSetColor()
Hack to set color on load game.
|
(package private) void |
allSetupBattleFight() |
(package private) void |
allSetupBattleMove() |
(package private) void |
allSetupBattleRecruit() |
(package private) void |
allSetupBattleSummon() |
(package private) void |
allSetupFight() |
(package private) void |
allSetupMove() |
(package private) void |
allSetupMuster() |
(package private) void |
allSetupSplit() |
(package private) void |
allSetupTurnState()
Needed if loading game outside the split phase.
|
(package private) void |
allSyncOption(java.lang.String optname,
boolean value) |
(package private) void |
allSyncOption(java.lang.String optname,
int value) |
(package private) void |
allSyncOption(java.lang.String optname,
java.lang.String value) |
(package private) void |
allTellAddCreature(AddCreatureAction event,
boolean updateHistory,
java.lang.String reason) |
(package private) void |
allTellAllLegionLocations() |
(package private) void |
allTellBattleMove(int tag,
BattleHex startingHex,
BattleHex endingHex,
boolean undo) |
(package private) void |
allTellCarryResults(CreatureServerSide carryTarget,
int carryDamageDone,
int carryDamageLeft,
java.util.Set<java.lang.String> carryTargetDescriptions) |
(package private) void |
allTellDidMove(Legion legion,
MasterHex startingHex,
MasterHex hex,
EntrySide entrySide,
boolean teleport,
CreatureType teleportingLord) |
(package private) void |
allTellDidSplit(Legion parent,
Legion child,
int turn,
boolean history)
Called from game after this legion was split off, or by history
|
(package private) void |
allTellDidSummon(Legion receivingLegion,
Legion donorLegion,
CreatureType summon) |
(package private) void |
allTellEngagement(MasterHex hex,
Legion attacker,
Legion defender) |
(package private) void |
allTellEngagementResults(Legion winner,
java.lang.String method,
int points,
int turns) |
(package private) void |
allTellGameOver(java.lang.String message,
boolean disposeFollows) |
(package private) void |
allTellHexDamageResults(CreatureServerSide target,
int damage) |
(package private) void |
allTellHexSlowResults(CreatureServerSide target,
int slowValue) |
(package private) void |
allTellLegionLocation(Legion legion) |
(package private) void |
allTellMovementRoll(int roll) |
(package private) void |
allTellPlayerElim(Player eliminatedPlayer,
Player slayer,
boolean updateHistory) |
(package private) void |
allTellRedo(boolean val) |
(package private) void |
allTellRemoveCreature(Legion legion,
CreatureType creature,
boolean updateHistory,
java.lang.String reason) |
(package private) void |
allTellReplay(boolean val,
int maxTurn) |
(package private) void |
allTellStrikeResults(CreatureServerSide striker,
CreatureServerSide target,
int strikeNumber,
java.util.List<java.lang.String> rolls,
int damage,
int carryDamageLeft,
java.util.Set<java.lang.String> carryTargetDescriptions) |
void |
allTellUndidMove(Legion legion,
MasterHex formerHex,
MasterHex currentHex,
boolean splitLegionHasForcedMove) |
(package private) void |
allUpdateCreatureCount(CreatureType type,
int count,
int deadCount) |
(package private) void |
allUpdatePlayerInfo() |
(package private) void |
allUpdatePlayerInfo(boolean treatDeadAsAlive) |
private boolean |
anyNonAiSocketsLeft() |
(package private) void |
appendToConnLogs(ClientHandler chInTrouble,
java.lang.String message) |
void |
applyCarries(BattleHex hex) |
(package private) void |
askAcquireAngel(PlayerServerSide player,
Legion legion,
java.util.List<CreatureType> recruits)
Find out if the player wants to acquire an angel or archangel.
|
(package private) void |
askChooseStrikePenalty(java.util.SortedSet<PenaltyOption> penaltyOptions)
Takes a Set of PenaltyOptions.
|
(package private) void |
askConcede(Legion ally,
Legion enemy)
Ask ally's player whether he wants to concede with ally.
|
(package private) void |
askFlee(Legion ally,
Legion enemy)
Ask ally's player whether he wants to flee with ally.
|
(package private) void |
askPickColor(Player player,
java.util.List<PlayerColor> colorsLeft) |
(package private) void |
askPickFirstMarker(Player player) |
void |
assignColor(PlayerColor color) |
void |
assignFirstMarker(java.lang.String markerId) |
void |
assignStrikePenalty(java.lang.String prompt) |
void |
checkServerConnection() |
void |
cleanupStartlog() |
void |
clientConfirmedCatchup() |
void |
clientWontConfirmCatchup(ClientHandler ch,
java.lang.String reason)
Check whether client is currently expected to send a caught-Up
confirmation.
|
private void |
closeSocketAndSelector()
Close serverSocket and selector, if needed
|
void |
concede(Legion legion) |
(package private) void |
createSummonAngel(Legion legion) |
(package private) void |
didRecruit(AddCreatureAction event,
CreatureType recruiter) |
private void |
disableAutoCloseStartupLog() |
private void |
disconnectChannel(java.nio.channels.SocketChannel sc,
java.nio.channels.SelectionKey key)
Close the SocketChannel, cancel the selection key and unregister
the SocketChannel from list of active SocketChannels.
|
(package private) void |
disposeAllClients() |
void |
doBattleMove(int tag,
BattleHex hex) |
void |
doCleanup() |
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)
Handle mustering for legion.
|
void |
doSetWhatToDoNext(WhatNextManager.WhatToDoNext whatToDoNext,
boolean triggerQuitTimer) |
void |
doSplit(Legion parent,
java.lang.String childId,
java.util.List<CreatureType> creaturesToSplit)
Executes a split of certain creatures from a legion.
|
void |
doSummon(Summoning event)
Handles a summon event
|
void |
enforcedDisconnectClient(java.lang.String name) |
void |
engage(MasterHex hex) |
void |
externShutdown()
Shutdown initiated by outside, i.e.
|
void |
fight(MasterHex hex) |
void |
flee(Legion legion) |
private PlayerServerSide |
getActivePlayerSS() |
private IClient |
getClient(Player player) |
int |
getClientCount() |
GameServerSide |
getGame() |
(package private) int |
getIntOption(java.lang.String optname) |
private Player |
getPlayer()
The player, for which data from socket is currently processed.
|
private java.util.List<java.lang.String> |
getPlayerInfo(boolean treatDeadAsAlive) |
(package private) java.lang.String |
getPlayerName()
Name of the player, for which data from socket is currently processed.
|
MessageRecorder |
getRecorder() |
private void |
handleChannelChanges() |
boolean |
handleGuiRequests() |
private void |
handleOutsideChanges(int timeout,
boolean stillWaitingForClients) |
private int |
handleReadFromChannel(java.nio.channels.SelectionKey key,
java.nio.channels.SocketChannel sc) |
private void |
handleSelectedKeys() |
(package private) void |
initFileServer() |
void |
initiateSaveGame(java.lang.String filename) |
(package private) void |
initSocketServer() |
private void |
initWaitingForPlayersToJoin(int count)
Initialize the number of players we wait for to join (thread-safe)
|
private boolean |
isActivePlayer()
returns true if the active player is the player owning the connection
from which data is currently processed
|
private boolean |
isBattleActivePlayer() |
boolean |
isClientGone(Player player) |
private java.lang.String |
isDoneWithStrikesOk()
Validates that it it OK to be "done with strikes" now for executing player
|
boolean |
isKnownClient(java.net.InetAddress requester) |
private boolean |
isReconnectAttempt(Player player) |
boolean |
isServerRunning() |
boolean |
isWithdrawalIrrelevant() |
void |
joinGame(java.lang.String playerName) |
(package private) void |
kickPhase() |
void |
leaveCarryMode() |
void |
loadFailed() |
void |
loadGame(java.lang.String filename) |
(package private) void |
logToStartLog(java.lang.String message) |
void |
makeProposal(java.lang.String proposalString)
playerName makes a proposal.
|
void |
mulligan() |
void |
newGame() |
(package private) void |
nextEngagement() |
void |
notifyThatGameFinished() |
(package private) void |
oneRevealLegion(Legion legion,
Player player,
java.lang.String reason) |
(package private) void |
oneRevealLegion(Player player,
Legion legion,
java.util.List<CreatureType> creatureNames,
java.lang.String reason)
Call from History during load game only
|
(package private) void |
oneSetOption(Player player,
java.lang.String optname,
boolean value) |
(package private) void |
oneSetOption(Player player,
java.lang.String optname,
java.lang.String value) |
(package private) void |
othersTellOneHasNetworkTrouble(ClientHandler chInTrouble) |
(package private) void |
othersTellOnesTroubleIsOver(ClientHandler chInTrouble) |
(package private) void |
othersTellReconnectCompleted(ClientHandler chInTrouble) |
(package private) void |
othersTellReconnectOngoing(ClientHandler chInTrouble) |
(package private) void |
othersTellRemainingTime(ClientHandler chInTrouble,
int secondsLeft) |
void |
overrideProcessingCH(Player player) |
private void |
processByteBuffer() |
(package private) void |
queueClientHandlerForChannelChanges(ClientHandler ch)
Put the ClientHandler into the queue to be removed
from selector on next possible opportunity
|
(package private) void |
reinforce(Legion legion) |
(package private) void |
repeatTellOneHasNetworkTrouble() |
void |
replyToRequestGameInfo() |
void |
requestSyncDelta(int lastReceivedMessageNr,
int syncRequestNumber) |
void |
restoreProcessingCH() |
void |
run() |
void |
saveGame(java.lang.String filename) |
void |
saveGame(java.lang.String filename,
boolean autoSave) |
void |
sendDisconnect() |
void |
setBoardVisibility(Player player,
boolean val) |
void |
setObsolete() |
void |
setPauseState(boolean newState) |
(package private) void |
setPlayerName(Player player,
java.lang.String newName)
Used to change a player name after color is assigned.
|
void |
startGame()
When the last player has *joined* (not just connected), he calls this
here, and this will proceed with either loadGame2() or newGame2().
|
void |
startupProgressAbort() |
void |
startupProgressQuit() |
private void |
stopAccepting() |
void |
stopFileServer() |
void |
stopGame() |
void |
stopServerRunning() |
void |
strike(int tag,
BattleHex hex) |
(package private) void |
tellProposal(Player player,
Proposal proposal)
Tell playerName about proposal.
|
(package private) void |
triggerDispose() |
private void |
triggerWithdrawIfDoesNotReconnect(long intervalLen,
int intervals) |
(package private) void |
twoNegotiate(Legion attacker,
Legion defender) |
(package private) void |
undidRecruit(Legion legion,
CreatureType recruit,
boolean reinforced) |
(package private) void |
undidSplit(Legion splitoff,
Legion survivor,
boolean updateHistory,
int turn) |
void |
undoBattleMove(BattleHex hex) |
void |
undoMove(Legion legion) |
void |
undoRecruit(Legion legion) |
void |
undoSplit(Legion splitoff) |
void |
unregisterSocketChannel(java.nio.channels.SocketChannel socketChannel) |
(package private) boolean |
waitForClients() |
void |
waitOnSelector(int timeout,
boolean stillWaitingForClients) |
void |
waitUntilGameFinishes() |
void |
withdrawFromGame()
Withdraw the player for which data was currently processed on socket
(if it is a real one, and withdrawal still makes sense).
|
void |
withdrawFromGame(java.lang.String playerName)
Withdraw a specific player of which we know only the name; e.g.
|
private void |
withdrawFromGameIfRelevant(java.lang.Exception gotException,
boolean didDisconnect)
Something with the connection of "processingCH" which makes perhaps Withdraw necessary.
|
activeCount, checkAccess, clone, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
private static final java.util.logging.Logger LOGGER
private static StartupProgress startLog
private GameServerSide game
private final WhatNextManager whatNextManager
private final MessageRecorder recorder
private final java.util.List<IClient> clients
private final java.util.List<IClient> remoteClients
private final java.util.List<IClient> spectatorClients
private final java.util.List<RemoteLogHandler> remoteLogHandlers
private final java.util.Map<Player,IClient> playerToClientMap
private final java.util.List<java.nio.channels.SocketChannel> activeSocketChannelList
private int waitingForPlayers
private int waitingForPlayersToJoin
private final java.lang.Object wfptjSemaphor
private boolean sendPingRequests
private int spectators
private final int port
private CreatureServerSide striker
private CreatureServerSide target
private int strikeNumber
private java.util.List<java.lang.String> rolls
private java.net.ServerSocket serverSocket
private java.nio.channels.Selector selector
private java.nio.channels.SelectionKey acceptKey
private boolean stopAcceptingFlag
private final java.lang.Object guiRequestMutex
private boolean guiRequestSaveFlag
private java.lang.String guiRequestSaveFilename
private boolean inPauseState
private static java.lang.Thread fileServerThread
private boolean serverRunning
private boolean obsolete
private boolean shuttingDown
private boolean forceShutDown
private boolean initiateDisposal
private java.lang.String caughtUpAction
private final int timeoutDuringStart
private final int timeoutDuringGame
private final int timeoutDuringShutdown
private static final int WEBGAMES_STARTUP_TIMEOUT_SECS
private final int PING_REQUEST_INTERVAL_SEC
private long lastPingRound
private long startInititatedTime
private int gameStartupTimeoutSecs
private final java.lang.Object disposeAllClientsDoneMutex
private boolean disposeAllClientsDone
private final java.nio.ByteBuffer byteBuffer
ClientHandler processingCH
ClientHandler overriddenCH
private final java.util.List<ClientHandler> channelChanges
private final java.util.Map<java.lang.String,Server.WithdrawInfo> forcedWithdraws
private final java.lang.Object waitUntilOverMutex
private final java.util.HashSet<IClient> waitingToCatchup
Server(GameServerSide game, WhatNextManager whatNextMgr, int port)
public void run()
run
in interface java.lang.Runnable
run
in class java.lang.Thread
void initFileServer()
public boolean isKnownClient(java.net.InetAddress requester)
void initSocketServer()
boolean waitForClients()
public void overrideProcessingCH(Player player)
public void restoreProcessingCH()
public void waitOnSelector(int timeout, boolean stillWaitingForClients)
private void handleOutsideChanges(int timeout, boolean stillWaitingForClients) throws java.io.IOException
java.io.IOException
private void handleSelectedKeys() throws java.io.IOException, java.nio.channels.ClosedChannelException
java.io.IOException
java.nio.channels.ClosedChannelException
private void handleChannelChanges() throws java.io.IOException
java.io.IOException
public void externShutdown()
private void stopAccepting() throws java.io.IOException
java.io.IOException
private void closeSocketAndSelector()
private int handleReadFromChannel(java.nio.channels.SelectionKey key, java.nio.channels.SocketChannel sc) throws java.io.IOException
java.io.IOException
private void processByteBuffer()
private void withdrawFromGameIfRelevant(java.lang.Exception gotException, boolean didDisconnect)
gotException
- An exception, if calling this was caused by an (IO)Exception,
otherwise null, i.e. it was triggered by EOF.didDisconnect
- whether an explicit dicsonnect request message had been
received already from that client ( = no point to wait for reconnect attempt).private void triggerWithdrawIfDoesNotReconnect(long intervalLen, int intervals)
void queueClientHandlerForChannelChanges(ClientHandler ch)
public void notifyThatGameFinished()
public void waitUntilGameFinishes()
public void stopServerRunning()
public boolean isServerRunning()
public void stopFileServer()
private void disconnectChannel(java.nio.channels.SocketChannel sc, java.nio.channels.SelectionKey key) throws java.io.IOException
sc
- SocketChannel of the clientkey
- Key for that SocketChanneljava.io.IOException
public void unregisterSocketChannel(java.nio.channels.SocketChannel socketChannel)
public void setBoardVisibility(Player player, boolean val)
public boolean isClientGone(Player player)
private boolean anyNonAiSocketsLeft()
public void setObsolete()
java.lang.String getPlayerName()
private Player getPlayer()
private boolean isActivePlayer()
private PlayerServerSide getActivePlayerSS()
private boolean isBattleActivePlayer()
java.lang.String addClient(IClient client, java.lang.String playerName, boolean remote, int clientVersion, java.lang.String buildInfo)
client
- playerName
- remote
- clientVersion
- private boolean isReconnectAttempt(Player player)
public void startGame()
private void initWaitingForPlayersToJoin(int count)
count
- the number of players that are expected to joinpublic int getClientCount()
void disposeAllClients()
public void loadFailed()
public void cleanupStartlog()
public void doCleanup()
void allUpdatePlayerInfo(boolean treatDeadAsAlive)
void allUpdatePlayerInfo()
void allUpdateCreatureCount(CreatureType type, int count, int deadCount)
void allTellMovementRoll(int roll)
public void leaveCarryMode()
leaveCarryMode
in interface IServer
public void doneWithBattleMoves()
doneWithBattleMoves
in interface IServer
public void doneWithStrikes()
doneWithStrikes
in interface IServer
private java.lang.String isDoneWithStrikesOk()
void allInitBoard()
void allTellReplay(boolean val, int maxTurn)
void allTellRedo(boolean val)
void allRequestConfirmCatchup(java.lang.String action, boolean skipInTrouble)
void allTellAllLegionLocations()
void allTellLegionLocation(Legion legion)
void allRemoveLegion(Legion legion)
void allTellPlayerElim(Player eliminatedPlayer, Player slayer, boolean updateHistory)
void repeatTellOneHasNetworkTrouble()
void othersTellOneHasNetworkTrouble(ClientHandler chInTrouble)
void othersTellOnesTroubleIsOver(ClientHandler chInTrouble)
void othersTellReconnectOngoing(ClientHandler chInTrouble)
void othersTellRemainingTime(ClientHandler chInTrouble, int secondsLeft)
void othersTellReconnectCompleted(ClientHandler chInTrouble)
void appendToConnLogs(ClientHandler chInTrouble, java.lang.String message)
void allRequestPingIfNeeded()
void allTellGameOver(java.lang.String message, boolean disposeFollows)
void allSetupTurnState()
void allSetupSplit()
void allSetupMove()
void allSetupFight()
void allSetupMuster()
void kickPhase()
void allSetupBattleSummon()
void allSetupBattleRecruit()
void allSetupBattleMove()
void allSetupBattleFight()
void allPlaceNewChit(CreatureServerSide critter)
void allRemoveDeadBattleChits()
void allTellEngagementResults(Legion winner, java.lang.String method, int points, int turns)
void nextEngagement()
void askAcquireAngel(PlayerServerSide player, Legion legion, java.util.List<CreatureType> recruits)
public void acquireAngel(Legion legion, CreatureType angelType)
acquireAngel
in interface IServer
void createSummonAngel(Legion legion)
void reinforce(Legion legion)
public void doSummon(Summoning event)
IServer
public void doRecruit(Recruitment event)
void didRecruit(AddCreatureAction event, CreatureType recruiter)
void undidRecruit(Legion legion, CreatureType recruit, boolean reinforced)
void askConcede(Legion ally, Legion enemy)
public void doNotConcede(Legion legion)
doNotConcede
in interface IServer
void askFlee(Legion ally, Legion enemy)
public void makeProposal(java.lang.String proposalString)
makeProposal
in interface IServer
public void doBattleMove(int tag, BattleHex hex)
doBattleMove
in interface IServer
void allTellBattleMove(int tag, BattleHex startingHex, BattleHex endingHex, boolean undo)
public void applyCarries(BattleHex hex)
applyCarries
in interface IServer
public void undoBattleMove(BattleHex hex)
undoBattleMove
in interface IServer
void allTellStrikeResults(CreatureServerSide striker, CreatureServerSide target, int strikeNumber, java.util.List<java.lang.String> rolls, int damage, int carryDamageLeft, java.util.Set<java.lang.String> carryTargetDescriptions)
void allTellCarryResults(CreatureServerSide carryTarget, int carryDamageDone, int carryDamageLeft, java.util.Set<java.lang.String> carryTargetDescriptions)
void allTellHexSlowResults(CreatureServerSide target, int slowValue)
void allTellHexDamageResults(CreatureServerSide target, int damage)
void askChooseStrikePenalty(java.util.SortedSet<PenaltyOption> penaltyOptions)
public void assignStrikePenalty(java.lang.String prompt)
assignStrikePenalty
in interface IServer
void allInitBattle(MasterHex masterHex)
void allCleanupBattle()
public void allTellUndidMove(Legion legion, MasterHex formerHex, MasterHex currentHex, boolean splitLegionHasForcedMove)
public void undoRecruit(Legion legion)
undoRecruit
in interface IServer
public void doneWithSplits()
doneWithSplits
in interface IServer
public void doneWithMoves()
doneWithMoves
in interface IServer
public void doneWithEngagements()
doneWithEngagements
in interface IServer
public void doneWithRecruits()
doneWithRecruits
in interface IServer
public boolean isWithdrawalIrrelevant()
public void withdrawFromGame()
withdrawFromGame
in interface IServer
public void withdrawFromGame(java.lang.String playerName)
playerName
- Name of the player to withdrawpublic void sendDisconnect()
sendDisconnect
in interface IServer
void triggerDispose()
private java.util.List<java.lang.String> getPlayerInfo(boolean treatDeadAsAlive)
public void doSplit(Legion parent, java.lang.String childId, java.util.List<CreatureType> creaturesToSplit)
IServer
void allTellDidSplit(Legion parent, Legion child, int turn, boolean history)
public void doMove(Legion legion, MasterHex hex, EntrySide entrySide, boolean teleport, CreatureType teleportingLord)
void allTellDidMove(Legion legion, MasterHex startingHex, MasterHex hex, EntrySide entrySide, boolean teleport, CreatureType teleportingLord)
void allTellDidSummon(Legion receivingLegion, Legion donorLegion, CreatureType summon)
void allTellAddCreature(AddCreatureAction event, boolean updateHistory, java.lang.String reason)
void allTellRemoveCreature(Legion legion, CreatureType creature, boolean updateHistory, java.lang.String reason)
void allRevealLegion(Legion legion, java.lang.String reason)
void allRevealEngagedLegion(Legion legion, boolean isAttacker, java.lang.String reason)
legion
- the legion marker to reveal which is in a battleisAttacker
- true if the 'legion' is the atackker in the
battle, false for the defender.void allRevealLegion(Legion legion, java.util.List<CreatureType> creatures, java.lang.String reason)
void oneRevealLegion(Player player, Legion legion, java.util.List<CreatureType> creatureNames, java.lang.String reason)
void allFullyUpdateLegionStatus()
void allFullyUpdateAllLegionContents(java.lang.String reason)
void allRevealCreatures(Legion legion, java.util.List<CreatureType> creatureNames, java.lang.String reason)
public void loadGame(java.lang.String filename)
public void saveGame(java.lang.String filename)
public void saveGame(java.lang.String filename, boolean autoSave)
public void initiateSaveGame(java.lang.String filename)
public void setPauseState(boolean newState)
public boolean handleGuiRequests()
public void checkServerConnection()
checkServerConnection
in interface IServer
public void clientWontConfirmCatchup(ClientHandler ch, java.lang.String reason)
reason
- Reason why client won't send the confirmation
(typically disconnected or something).public void clientConfirmedCatchup()
clientConfirmedCatchup
in interface IServer
private void actOnAllCaughtUp()
void setPlayerName(Player player, java.lang.String newName)
void askPickColor(Player player, java.util.List<PlayerColor> colorsLeft)
public void assignColor(PlayerColor color)
assignColor
in interface IServer
void askPickFirstMarker(Player player)
public void assignFirstMarker(java.lang.String markerId)
assignFirstMarker
in interface IServer
void allSetColor()
int getIntOption(java.lang.String optname)
void oneSetOption(Player player, java.lang.String optname, java.lang.String value)
void oneSetOption(Player player, java.lang.String optname, boolean value)
void allSyncOption(java.lang.String optname, java.lang.String value)
void allSyncOption(java.lang.String optname, boolean value)
void allSyncOption(java.lang.String optname, int value)
void allLog(java.lang.String message)
void logToStartLog(java.lang.String message)
private void disableAutoCloseStartupLog()
public void doSetWhatToDoNext(WhatNextManager.WhatToDoNext whatToDoNext, boolean triggerQuitTimer)
public void startupProgressAbort()
public void startupProgressQuit()
public GameServerSide getGame()
public MessageRecorder getRecorder()
public void replyToRequestGameInfo()
public void requestSyncDelta(int lastReceivedMessageNr, int syncRequestNumber)
public void joinGame(java.lang.String playerName)
public void enforcedDisconnectClient(java.lang.String name)