public class GameServerSide extends Game
Game
class which then can be shared between server and clients (the class, not the instances).
Other parts should be moved into the Server
class or elsewhere.Modifier and Type | Class and Description |
---|---|
(package private) class |
GameServerSide.GamePhaseAdvancer
Wrap the complexity of phase advancing.
|
Modifier and Type | Field and Description |
---|---|
private boolean |
acquiring |
private int |
activePlayerNum |
private java.util.Set<Proposal> |
attackerProposals |
private boolean |
battleInProgress |
private BattleStrikeServerSide |
battleStrikeSS |
private java.util.LinkedList<Player> |
colorPickOrder |
private java.util.List<PlayerColor> |
colorsLeft |
private Player |
cvbPlayer |
private java.util.Set<Proposal> |
defenderProposals |
private java.lang.String |
engagementResult |
private java.lang.String |
flagFilename |
private static int |
gameCounter |
private java.lang.String |
gameId |
private GameSaving |
gameSaver
The object that handles the Game Saving procedure
|
private History |
history |
private java.lang.String |
hostingPlayerName |
private boolean |
hotSeatMode |
private int |
lastRecruitTurnNumber |
private boolean |
loadingGame |
private static java.util.logging.Logger |
LOGGER |
private MovementServerSide |
movementSS |
private INotifyWebServer |
notifyWebServer |
private Options |
options |
private boolean |
pendingAdvancePhase |
private PhaseAdvancer |
phaseAdvancer |
private int |
pointsScored |
private boolean |
reinforcing |
private boolean |
replayOngoing |
private Server |
server |
(package private) boolean |
serverGotAll |
private WebClient |
startingWebClient |
private boolean |
summoning |
private int |
turnCombatFinished |
(package private) java.lang.Object |
waitForClientsMutex |
private WhatNextManager |
whatNextManager |
private Legion |
winner |
battle, phase, players, turnNumber
Constructor and Description |
---|
GameServerSide(WhatNextManager whatNextMgr,
Options serverOptions,
Variant variant)
The normal constructor to be used everywhere
|
Modifier and Type | Method and Description |
---|---|
void |
acquireMaybe(LegionServerSide legion,
int scoreBeforeAdd,
int pointsToAdd)
If the legion can acquire (height < 7), find out which acquirable it
might get for the pointsToAdd, and fire off the askAcquirable messages.
|
void |
actOnWaitForClientsCompleted(boolean gotAll) |
(package private) void |
addCreatureEvent(AddCreatureAction event,
java.lang.String reason) |
private void |
addPlayersFromOptions() |
(package private) void |
advancePhase(Phase oldPhase,
Player player)
Advance to the next phase, only if the passed oldPhase and playerName
are current.
|
private void |
announceGameOver(boolean disposeFollows) |
private boolean |
anonymousRecruitLegal(Legion legion,
CreatureType recruit)
Return true if this legion can recruit this recruit
without disclosing a recruiter.
|
(package private) void |
askAcquireAngel(PlayerServerSide player,
Legion legion,
java.util.List<CreatureType> recruits) |
(package private) void |
assignColor(Player player,
PlayerColor color) |
private void |
assignColors() |
private void |
assignTowers()
Randomize towers by rolling dice and rerolling ties.
|
(package private) void |
autoSave() |
private void |
checkEngagementDone() |
(package private) void |
checkForVictory() |
private void |
cleanupWhenGameOver() |
private void |
clearFlags() |
(package private) void |
concede(Legion attacker) |
(package private) PlayerServerSide |
createAndAddPlayer(java.lang.String name,
java.lang.String shortTypeName) |
void |
createBattle(Legion attacker,
Legion defender,
BattleServerSide.LegionTags activeLegionTag,
MasterHex engagementHex,
BattlePhase battlePhase) |
private void |
createLocalClient(PlayerServerSide player,
boolean createGUI,
java.lang.String type) |
void |
createLocalClients() |
(package private) void |
createSummonAngel(Legion attacker) |
(package private) void |
dispose() |
(package private) java.lang.String |
doMove(Legion legion,
MasterHex hex,
EntrySide entrySide,
boolean teleport,
CreatureType teleportingLord)
Move the legion to the hex if legal.
|
(package private) void |
doneAcquiringAngels() |
(package private) void |
doneReinforcing() |
(package private) void |
doNotConcede(Legion legion)
Used only for pre-battle attacker concession.
|
(package private) void |
doNotFlee(Legion legion) |
(package private) void |
doRecruit(Legion legion,
CreatureType recruit,
CreatureType recruiter)
Add recruit to legion.
|
(package private) boolean |
doSplit(Legion parent,
java.lang.String childId,
java.util.List<CreatureType> creaturesToSplit)
Return true and call Server.didSplit() if the split succeeded.
|
(package private) void |
doSummon(Summoning event)
Handles summoning of a creature.
|
void |
editModeAddCreature(java.lang.String markerId,
java.lang.String creatureName) |
void |
editModeRelocateLegion(java.lang.String markerId,
java.lang.String hexLabel) |
void |
editModeRemoveCreature(java.lang.String markerId,
java.lang.String creatureName) |
(package private) void |
engage(MasterHex hex) |
private void |
engage2(MasterHex hex) |
private void |
engage3(MasterHex hex) |
(package private) void |
fight(MasterHex hex) |
private java.util.List<CreatureType> |
findEligibleRecruiters(Legion legion,
java.lang.String recruitName)
Return a list of eligible recruiter creatures.
|
(package private) java.util.List<CreatureType> |
findEligibleRecruits(Legion legion,
MasterHex hex)
Return a list of eligible recruits, as Creatures.
|
(package private) Player |
findNetworkPlayer(java.lang.String playerName)
Find a Player for a new remote client.
|
(package private) void |
finishBattle(MasterHex masterHex,
boolean attackerEntered,
int points,
int turnDone) |
(package private) void |
flee(Legion legion) |
boolean |
gameShouldContinue() |
(package private) Player |
getActivePlayer() |
(package private) int |
getActivePlayerNum() |
(package private) static java.util.List<MasterHex> |
getBalancedTowers(int numPlayers,
java.util.List<MasterHex> towerList)
Return a list with a balanced order of numPlayer towers chosen
from towerList, which must hold numeric strings.
|
(package private) BattleServerSide |
getBattleSS() |
BattleStrikeServerSide |
getBattleStrikeSS() |
(package private) History |
getHistory() |
java.lang.String |
getHostingPlayer() |
(package private) int |
getIntOption(java.lang.String optname) |
LegionServerSide |
getLegionByMarkerId(java.lang.String markerId) |
int |
getMovementRoll() |
(package private) Player |
getNextColorPicker() |
(package private) INotifyWebServer |
getNotifyWebServer() |
(package private) boolean |
getOption(java.lang.String optname) |
(package private) IOptions |
getOptions() |
Player |
getPlayerByMarkerId(java.lang.String markerId) |
(package private) Player |
getPlayerByName(java.lang.String playerName)
Resolve playerName into Player object.
|
(package private) Player |
getPlayerByNameIgnoreNull(java.lang.String playerName)
Resolve playerName into Player object.
|
(package private) Player |
getPlayerByShortColor(java.lang.String shortColor)
NOTE: to be used only during loading a Game!
Client side has a more sophisticated version that takes
slain players and their inherited markers into account.
|
private Player |
getPlayerUsingColor(java.lang.String shortColor) |
private int |
getPort() |
(package private) Server |
getServer() |
private LegionServerSide |
getStartingLegion(java.lang.String markerId,
MasterHex hex,
Player player) |
(package private) java.lang.String |
getUniqueName(java.lang.String name,
Player player)
If the name is taken, add random digits to the end.
|
private Player |
getWinner() |
private void |
handleConcession(Legion loser,
Legion winner,
boolean fled) |
private void |
handleNegotiation(Proposal results) |
(package private) void |
handlePlayerWithdrawal(Player player)
A player requested he wants to withdraw (or connection was lost, and
server socket handling does withdraw then).
|
boolean |
hasConventionalMove(LegionServerSide legion,
MasterHex hex,
int roll,
boolean ignoreFriends) |
private void |
hotSeatModeChangeBoards() |
private void |
initServer() |
private boolean |
isAutoSavePoint()
So far, we do autosave only at begin of each players turn, i.e.
|
(package private) boolean |
isBattleInProgress() |
(package private) boolean |
isLoadingGame() |
(package private) boolean |
isReplayOngoing() |
void |
kickstartGame() |
(package private) void |
legionMoveEvent(Legion legion,
MasterHex newHex,
EntrySide entrySide,
boolean teleport,
CreatureType lord) |
(package private) void |
legionUndoMoveEvent(Legion legion) |
boolean |
loadGame(org.jdom.Element root) |
(package private) boolean |
loadGame2() |
boolean |
loadGameAndWaitUntilOver(org.jdom.Element root) |
private void |
makeMovementRoll() |
private java.lang.String |
makeNameByType(java.lang.String templateName,
java.lang.String type) |
(package private) static GameServerSide |
makeNewGameServerSide(Variant variant)
Shortcut for UnitTests,
to create a Game with dummy input objects on the fly.
|
(package private) void |
makeProposal(java.lang.String playerName,
java.lang.String proposalString)
playerName offers proposal.
|
(package private) void |
mergeEvent(java.lang.String splitoffId,
java.lang.String survivorId) |
(package private) void |
movementRollEvent(Player player,
int roll) |
(package private) int |
mulligan() |
private boolean |
nameIsTaken(java.lang.String name,
Player checkedPlayer) |
(package private) boolean |
newGame(java.lang.String hostingPlayer)
Start a new game.
|
(package private) void |
newGame2() |
private void |
newGame3()
Done picking player colors; proceed to start game.
|
static GameServerSide |
newGameServerSide(WhatNextManager whatNextMgr,
Options serverOptions,
Variant variant)
For more complicated functional tests
|
(package private) void |
nextPickColor() |
protected void |
notifyTestCaseGameIsUpNow() |
private void |
placeInitialLegion(PlayerServerSide player,
java.lang.String markerId) |
(package private) void |
playerElimEvent(Player player,
Player slayer) |
private void |
readLegion(org.jdom.Element leg,
PlayerServerSide player) |
(package private) void |
recruitEvent(Legion legion,
CreatureType recruit,
CreatureType recruiter) |
(package private) void |
reinforce(Legion legion)
Called locally and from Battle.
|
(package private) void |
removeCreatureEvent(Legion legion,
CreatureType creature,
java.lang.String reason) |
private boolean |
resyncBackupData() |
(package private) void |
revealEvent(boolean allPlayers,
java.util.List<Player> players,
Legion legion,
java.util.List<CreatureType> creatureNames,
java.lang.String reason) |
(package private) void |
saveGameWithErrorHandling(java.lang.String filename,
boolean autoSave) |
private void |
setEngagementResult(java.lang.String aResult,
Legion winner,
int aPoints,
int aTurn) |
void |
setFlagFilename(java.lang.String flagFilename) |
void |
setGameOver(boolean gameOver,
java.lang.String message) |
private void |
setupFight() |
private void |
setupMove() |
private void |
setupMuster() |
private void |
setupPhase() |
private void |
setupSplit() |
private void |
sortPlayersDescendingTower()
Temporary solution ...
|
(package private) void |
splitEvent(Legion parent,
Legion child,
java.util.List<CreatureType> splitoffs) |
boolean |
startNewGameAndWaitUntilOver(java.lang.String hostingPlayer) |
private boolean |
startServerAndWaitUntilNotifiedThatWaitForClientsCompleted() |
void |
stopAllDueToFunctionalTestCompleted() |
protected void |
storeLocalClient(java.lang.String playerName,
Client c) |
private void |
syncOptions()
Send all current game option values to all clients.
|
(package private) void |
undoMove(Legion legion) |
(package private) void |
undoRecruitEvent(Legion legion) |
private void |
updateCaretakerDisplays()
Update the dead and available counts for all creature types on all clients.
|
private void |
updateCaretakerDisplaysFor(CreatureType type)
Update the dead and available counts for a creature type on all clients.
|
protected void |
waitUntilGameFinishes() |
addPlayer, clearEngagementData, containsOpposingLegions, createEngagement, findEngagements, findLegionsWithSummonables, getAllLegions, getAttacker, getBattle, getBattleActiveLegion, getBattleSite, getBattleStrike, getBattleTurnNumber, getCaretaker, getDefender, getEnemyLegions, getEnemyLegions, getEngagement, getFirstEnemyLegion, getFirstFriendlyLegion, getFirstLegion, getFriendlyLegions, getGameOverMessage, getLegionsByHex, getNumEnemyLegions, getNumFriendlyLegions, getNumHumansRemaining, getNumLegions, getNumLivingCreatures, getNumLivingPlayers, getNumPlayers, getNumRemoteRemaining, getPhase, getPlayers, getPreliminaryPlayerNames, getTurnNumber, getVariant, isEngagementInProgress, isEngagementOngoing, isGameOver, isOccupied, isPhase, onlyAIsRemain, setMovementRoll, setPhase, setTurnNumber
private static final java.util.logging.Logger LOGGER
private int activePlayerNum
private int lastRecruitTurnNumber
private boolean battleInProgress
private boolean summoning
private boolean reinforcing
private boolean acquiring
private int pointsScored
private int turnCombatFinished
private Legion winner
private java.lang.String engagementResult
private boolean pendingAdvancePhase
private boolean loadingGame
private boolean replayOngoing
private Server server
private final java.util.Set<Proposal> attackerProposals
private final java.util.Set<Proposal> defenderProposals
private final java.util.LinkedList<Player> colorPickOrder
private java.util.List<PlayerColor> colorsLeft
private final PhaseAdvancer phaseAdvancer
private final Options options
private java.lang.String hostingPlayerName
private java.lang.String flagFilename
private INotifyWebServer notifyWebServer
private WebClient startingWebClient
private final WhatNextManager whatNextManager
private History history
private final BattleStrikeServerSide battleStrikeSS
private final MovementServerSide movementSS
private final GameSaving gameSaver
private static int gameCounter
private final java.lang.String gameId
private boolean hotSeatMode
private Player cvbPlayer
java.lang.Object waitForClientsMutex
boolean serverGotAll
public GameServerSide(WhatNextManager whatNextMgr, Options serverOptions, Variant variant)
whatNextMgr
- A WhatNextManager object which manages the main
control flow which thing to do 'next' when this game is over.serverOptions
- The server side options, initialized from the
GetPlayers dialog and/or command line options.variant
- Variant of this gamestatic GameServerSide makeNewGameServerSide(Variant variant)
public static GameServerSide newGameServerSide(WhatNextManager whatNextMgr, Options serverOptions, Variant variant)
whatNextMgr
- serverOptions
- variant
- public void setFlagFilename(java.lang.String flagFilename)
public java.lang.String getHostingPlayer()
private int getPort()
private void initServer()
public void actOnWaitForClientsCompleted(boolean gotAll)
private boolean startServerAndWaitUntilNotifiedThatWaitForClientsCompleted()
public void createLocalClients()
private void createLocalClient(PlayerServerSide player, boolean createGUI, java.lang.String type)
protected void storeLocalClient(java.lang.String playerName, Client c)
private void updateCaretakerDisplaysFor(CreatureType type)
private void updateCaretakerDisplays()
protected void waitUntilGameFinishes()
private void cleanupWhenGameOver()
private void clearFlags()
private void addPlayersFromOptions()
public boolean startNewGameAndWaitUntilOver(java.lang.String hostingPlayer)
boolean newGame(java.lang.String hostingPlayer)
void newGame2()
private void sortPlayersDescendingTower()
private boolean nameIsTaken(java.lang.String name, Player checkedPlayer)
java.lang.String getUniqueName(java.lang.String name, Player player)
Player findNetworkPlayer(java.lang.String playerName)
private void syncOptions()
private void assignColors()
void nextPickColor()
private java.lang.String makeNameByType(java.lang.String templateName, java.lang.String type)
void assignColor(Player player, PlayerColor color)
Player getNextColorPicker()
private void newGame3()
private void assignTowers()
static java.util.List<MasterHex> getBalancedTowers(int numPlayers, java.util.List<MasterHex> towerList)
Server getServer()
PlayerServerSide createAndAddPlayer(java.lang.String name, java.lang.String shortTypeName)
int getActivePlayerNum()
Player getActivePlayer()
private void makeMovementRoll()
public int getMovementRoll()
getMovementRoll
in class Game
Player getPlayerByNameIgnoreNull(java.lang.String playerName)
playerName
- Player getPlayerByName(java.lang.String playerName)
playerName
- Player getPlayerByShortColor(java.lang.String shortColor)
void handlePlayerWithdrawal(Player player)
player
- The player that wishes to withdraw from the game
TODO Notify all players.private Player getWinner()
void checkForVictory()
private void announceGameOver(boolean disposeFollows)
boolean isLoadingGame()
boolean isReplayOngoing()
public void stopAllDueToFunctionalTestCompleted()
public void kickstartGame()
protected void notifyTestCaseGameIsUpNow()
void advancePhase(Phase oldPhase, Player player)
public void setGameOver(boolean gameOver, java.lang.String message)
setGameOver
in class Game
private void setupPhase()
private void setupSplit()
private void hotSeatModeChangeBoards()
private void setupMove()
private void setupFight()
private void setupMuster()
private boolean isAutoSavePoint()
void autoSave()
void saveGameWithErrorHandling(java.lang.String filename, boolean autoSave)
public boolean loadGameAndWaitUntilOver(org.jdom.Element root)
public boolean loadGame(org.jdom.Element root)
public void createBattle(Legion attacker, Legion defender, BattleServerSide.LegionTags activeLegionTag, MasterHex engagementHex, BattlePhase battlePhase)
private void readLegion(org.jdom.Element leg, PlayerServerSide player) throws org.jdom.DataConversionException
org.jdom.DataConversionException
boolean loadGame2()
private boolean resyncBackupData()
java.util.List<CreatureType> findEligibleRecruits(Legion legion, MasterHex hex)
private java.util.List<CreatureType> findEligibleRecruiters(Legion legion, java.lang.String recruitName)
private boolean anonymousRecruitLegal(Legion legion, CreatureType recruit)
void doRecruit(Legion legion, CreatureType recruit, CreatureType recruiter)
public void editModeAddCreature(java.lang.String markerId, java.lang.String creatureName)
public void editModeRemoveCreature(java.lang.String markerId, java.lang.String creatureName)
public void editModeRelocateLegion(java.lang.String markerId, java.lang.String hexLabel)
public void acquireMaybe(LegionServerSide legion, int scoreBeforeAdd, int pointsToAdd)
legion
- Legion which earned the points and thus is entitled to
get the acqirablescoreBeforeAdd
- Score from which to startpointsToAdd
- How many points were earnedvoid dispose()
private void placeInitialLegion(PlayerServerSide player, java.lang.String markerId)
public boolean hasConventionalMove(LegionServerSide legion, MasterHex hex, int roll, boolean ignoreFriends)
void createSummonAngel(Legion attacker)
void reinforce(Legion legion)
void doneReinforcing()
void doSummon(Summoning event)
event
- The summoning event (or null if summoning is to be skipped)
TODO get rid of downcastsBattleServerSide getBattleSS()
boolean isBattleInProgress()
History getHistory()
void finishBattle(MasterHex masterHex, boolean attackerEntered, int points, int turnDone)
boolean doSplit(Legion parent, java.lang.String childId, java.util.List<CreatureType> creaturesToSplit)
java.lang.String doMove(Legion legion, MasterHex hex, EntrySide entrySide, boolean teleport, CreatureType teleportingLord)
void undoMove(Legion legion)
void engage(MasterHex hex)
private void engage2(MasterHex hex)
private void engage3(MasterHex hex)
void flee(Legion legion)
void concede(Legion attacker)
void doNotFlee(Legion legion)
void doNotConcede(Legion legion)
void makeProposal(java.lang.String playerName, java.lang.String proposalString)
void fight(MasterHex hex)
private void handleNegotiation(Proposal results)
void askAcquireAngel(PlayerServerSide player, Legion legion, java.util.List<CreatureType> recruits)
void doneAcquiringAngels()
private void setEngagementResult(java.lang.String aResult, Legion winner, int aPoints, int aTurn)
private void checkEngagementDone()
public boolean gameShouldContinue()
public LegionServerSide getLegionByMarkerId(java.lang.String markerId)
getLegionByMarkerId
in class Game
public Player getPlayerByMarkerId(java.lang.String markerId)
private Player getPlayerUsingColor(java.lang.String shortColor)
private LegionServerSide getStartingLegion(java.lang.String markerId, MasterHex hex, Player player)
int mulligan()
IOptions getOptions()
boolean getOption(java.lang.String optname)
int getIntOption(java.lang.String optname)
void addCreatureEvent(AddCreatureAction event, java.lang.String reason)
void removeCreatureEvent(Legion legion, CreatureType creature, java.lang.String reason)
void splitEvent(Legion parent, Legion child, java.util.List<CreatureType> splitoffs)
void mergeEvent(java.lang.String splitoffId, java.lang.String survivorId)
void revealEvent(boolean allPlayers, java.util.List<Player> players, Legion legion, java.util.List<CreatureType> creatureNames, java.lang.String reason)
void movementRollEvent(Player player, int roll)
void legionMoveEvent(Legion legion, MasterHex newHex, EntrySide entrySide, boolean teleport, CreatureType lord)
void legionUndoMoveEvent(Legion legion)
void recruitEvent(Legion legion, CreatureType recruit, CreatureType recruiter)
void undoRecruitEvent(Legion legion)
INotifyWebServer getNotifyWebServer()
public BattleStrikeServerSide getBattleStrikeSS()