|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectnet.sf.colossus.game.Game
net.sf.colossus.server.GameServerSide
public final class GameServerSide
Class Game gets and holds high-level data about a Titan game.
This is the old design with the game information in the server. Some
of the functionality here is supposed to be moved into the 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.
Nested Class Summary | |
---|---|
(package private) class |
GameServerSide.GamePhaseAdvancer
Wrap the complexity of phase advancing. |
Field Summary | |
---|---|
private boolean |
acquiring
|
private int |
activePlayerNum
|
private java.util.Set<Proposal> |
attackerProposals
|
private BattleServerSide |
battle
|
private boolean |
battleInProgress
|
private java.util.LinkedList<Player> |
colorPickOrder
|
private java.util.List<PlayerColor> |
colorsLeft
|
private Player |
cvbPlayer
|
private java.util.Set<Proposal> |
defenderProposals
|
private boolean |
engagementInProgress
|
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 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
|
Fields inherited from class net.sf.colossus.game.Game |
---|
phase, players, turnNumber |
Constructor Summary | |
---|---|
GameServerSide(WhatNextManager whatNextMgr,
Options serverOptions,
Variant variant)
The normal constructor to be used everywhere |
Method Summary | |
---|---|
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)
|
(package private) PlayerServerSide |
addPlayer(java.lang.String name,
java.lang.String shortTypeName)
|
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)
|
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. |
(package private) void |
engage(MasterHex hex)
|
private void |
engage2(MasterHex hex)
|
private void |
engage3(MasterHex hex)
|
(package private) void |
fight(MasterHex hex)
|
private int |
findBlock(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. |
private EntrySide |
findEntrySide(MasterHex hex,
int cameFrom)
Set the entry side relative to the hex label. |
private java.util.Set<MasterHex> |
findNearbyUnoccupiedHexes(MasterHex hex,
Legion legion,
int roll,
int cameFrom,
boolean ignoreFriends)
Recursively find all unoccupied hexes within roll hexes, for tower teleport. |
(package private) Player |
findNetworkPlayer(java.lang.String playerName)
Find a Player for a new remote client. |
private java.util.Set<java.lang.String> |
findNormalMoves(MasterHex hex,
Legion legion,
int roll,
int block,
int cameFrom,
boolean ignoreFriends)
Recursively find conventional moves from this hex. |
(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 |
getBattle()
|
(package private) History |
getHistory()
|
java.lang.String |
getHostingPlayer()
|
(package private) int |
getIntOption(java.lang.String optname)
|
LegionServerSide |
getLegionByMarkerId(java.lang.String markerId)
|
(package private) Player |
getNextColorPicker()
|
(package private) INotifyWebServer |
getNotifyWebServer()
|
(package private) boolean |
getOption(java.lang.String optname)
|
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). |
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 |
isEngagementInProgress()
|
(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)
|
(package private) java.util.Set<MasterHex> |
listNormalMoves(Legion legion,
MasterHex hex,
int movementRoll,
boolean ignoreFriends)
Return set of hexLabels describing where this legion can move without teleporting. |
private java.util.Set<EntrySide> |
listPossibleEntrySides(Legion legion,
MasterHex targetHex,
boolean teleport)
Return a Set of Strings "Left" "Right" or "Bottom" describing possible entry sides. |
private java.util.Set<MasterHex> |
listTeleportMoves(Legion legion,
MasterHex hex,
int movementRoll,
boolean ignoreFriends)
Return set of hexLabels describing where this legion can teleport. |
boolean |
loadGame(org.jdom.Element root)
|
(package private) boolean |
loadGame2()
|
boolean |
loadGameAndWaitUntilOver(org.jdom.Element root)
|
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. |
(package private) void |
nextPickColor()
|
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()
|
private void |
syncOptions()
Send all current game option values to all clients. |
private boolean |
titanTeleportAllowed()
|
private boolean |
towerTeleportAllowed()
|
private boolean |
towerToNonTowerTeleportAllowed()
|
private boolean |
towerToTowerTeleportAllowed()
|
(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. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
private static final java.util.logging.Logger LOGGER
private int activePlayerNum
private int lastRecruitTurnNumber
private boolean engagementInProgress
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 BattleServerSide battle
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 GameSaving gameSaver
private static int gameCounter
private final java.lang.String gameId
private boolean hotSeatMode
private Player cvbPlayer
java.lang.Object waitForClientsMutex
boolean serverGotAll
Constructor Detail |
---|
public GameServerSide(WhatNextManager whatNextMgr, Options serverOptions, Variant variant)
serverOptions
- The server side options, initialized from the
GetPlayers dialog and/or command line options.startObj
- The 'Start' object that started this game, and thus
manages the main control flow which thing to do 'next' when this game
is over.Method Detail |
---|
static GameServerSide makeNewGameServerSide(Variant 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)
private void updateCaretakerDisplaysFor(CreatureType type)
private void updateCaretakerDisplays()
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 addPlayer(java.lang.String name, java.lang.String shortTypeName)
int getActivePlayerNum()
Player getActivePlayer()
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()
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)
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 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)
private EntrySide findEntrySide(MasterHex hex, int cameFrom)
private java.util.Set<java.lang.String> findNormalMoves(MasterHex hex, Legion legion, int roll, int block, int cameFrom, boolean ignoreFriends)
private java.util.Set<MasterHex> findNearbyUnoccupiedHexes(MasterHex hex, Legion legion, int roll, int cameFrom, boolean ignoreFriends)
private int findBlock(MasterHex hex)
java.util.Set<MasterHex> listNormalMoves(Legion legion, MasterHex hex, int movementRoll, boolean ignoreFriends)
private boolean towerTeleportAllowed()
private boolean towerToTowerTeleportAllowed()
private boolean towerToNonTowerTeleportAllowed()
private boolean titanTeleportAllowed()
private java.util.Set<MasterHex> listTeleportMoves(Legion legion, MasterHex hex, int movementRoll, boolean ignoreFriends)
private java.util.Set<EntrySide> listPossibleEntrySides(Legion legion, MasterHex targetHex, boolean teleport)
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 getBattle()
boolean isBattleInProgress()
boolean isEngagementInProgress()
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 handleConcession(Legion loser, Legion winner, boolean fled)
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()
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 playerElimEvent(Player player, Player slayer)
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()
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |