package net.sf.colossus.server;
import java.util.List;
import net.sf.colossus.game.EntrySide;
import net.sf.colossus.game.Legion;
import net.sf.colossus.game.PlayerColor;
import net.sf.colossus.game.actions.Recruitment;
import net.sf.colossus.game.actions.Summoning;
import net.sf.colossus.variant.BattleHex;
import net.sf.colossus.variant.CreatureType;
import net.sf.colossus.variant.MasterHex;
/**
* IServer is an interface for the client-accessible parts of Server.
*
* @author David Ripton
*/
public interface IServer
{
public static final int CLIENT_VERSION_UNDERSTANDS_PING = 2;
public static final int CLIENT_VERSION_CAN_RECONNECT = 3;
public static final int CLIENT_VERSION_CAN_HANDLE_NAK = 4;
public static final int CLIENT_VERSION_VARIANT_XML_OK = 5;
public static final int CLIENT_VERSION_INACTIVITY_TIMEOUT = 6;
public static final int CLIENT_VERSION_REQUEST_ROLL = 7;
public static final int CLIENT_VERSION_CAN_SUSPEND = 8;
public static final int CLIENT_VERSION_NEW_PLAYER_INFO = 9;
public static final int CLIENT_VERSION_MORE_DEBUG_INFO = 10;
// New in version 2: replies to pingRequest
// New in version 3: ability to reconnect (simple case only, so far)
// New in version 4: Client can handle the NAK for an illegal battle move
// New in version 5: Client always fetches xml files from server
// New in version 6: AI kicks in after too long inactivity
// New in version 7: Client can ask user to approve/deny extra roll request
// New in version 8: Client can ask user to approve/deny suspend request
// New in version 9: Server sends only changed information
public static final int CLIENT_VERSION = CLIENT_VERSION_MORE_DEBUG_INFO;
// Clients that do not send version yet at all, are treated as version -1.
// For those, even show on server side an error dialog and refuse them to
// connect. Thus, minimum "meaningful version" at the moment is zero.
public static final int MINIMUM_CLIENT_VERSION = 0;
public void leaveCarryMode();
public void doneWithBattleMoves();
public void doneWithStrikes();
public void acquireAngel(Legion legion, CreatureType angelType);
/**
* Handles a summon event
*
* @param event The summon event or null if summoning is not wanted.
*/
public void doSummon(Summoning event);
// TODO extend or subclass event to include recruiter
public void doRecruit(Recruitment event);
public void engage(MasterHex hex);
public void concede(Legion legion);
public void doNotConcede(Legion legion);
public void flee(Legion legion);
public void doNotFlee(Legion legion);
public void makeProposal(String proposalString);
public void fight(MasterHex hex);
public void doBattleMove(int tag, BattleHex hex);
public void strike(int tag, BattleHex hex);
public void applyCarries(BattleHex hex);
public void undoBattleMove(BattleHex hex);
public void assignStrikePenalty(String prompt);
public void mulligan();
public void requestExtraRoll();
public void extraRollResponse(boolean approved, int requestId);
public void suspendResponse(boolean approved);
public void undoSplit(Legion splitoff);
public void undoMove(Legion legion);
public void undoRecruit(Legion legion);
public void doneWithSplits();
public void doneWithMoves();
public void doneWithEngagements();
public void doneWithRecruits();
public void withdrawFromGame();
public void sendDisconnect();
public void stopGame();
/**
* Executes a split of certain creatures from a legion.
*
* @param parent The legion to split the creatures out of.
* @param childMarker A marker for the new legion.
* @param creaturesToSplit The creatures to split out.
*/
public void doSplit(Legion parent, String childMarker,
List<CreatureType> creaturesToSplit);
public void doMove(Legion legion, MasterHex hex, EntrySide entrySide,
boolean teleport, CreatureType teleportingLord);
public void assignColor(PlayerColor color);
public void assignFirstMarker(String markerId);
// XXX Disallow the following methods in network games
public void newGame();
public void loadGame(String filename);
public void saveGame(String filename);
public void requestToSuspendGame(boolean save);
public void checkServerConnection();
public void checkAllConnections(String requestingClientName);
public void peerRequestReceived(String requestingClientName, int queueLen);
public void peerRequestProcessed(String requestingClientName);
public void clientConfirmedCatchup();
public void joinGame(String playerName);
public void logMsgToServer(String severity, String message);
public void cheatModeDestroyLegion(Legion legion);
public void watchGame();
}