Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package sonc.game;
- import java.util.List;
- import java.io.File;
- import java.io.FileOutputStream;
- import java.io.ObjectOutputStream;
- import java.io.Serializable;
- import java.util.LinkedList;
- import sonc.battle.Ship;
- import sonc.battle.World;
- import sonc.shared.Movie;
- import sonc.shared.SoncException;
- import sonc.utils.AgentBuilder;
- /**
- * An instance of this class is responsible for managing a community of players with several games taking place simultaneously. The methods of this class are those needed by web client thus it follows the Façade design pattern. It also follows the singleton design pattern to provide a sigle instance of this class to the application
- *
- */
- public class Manager implements Serializable, Manageritf{
- private static final long serialVersionUID = 1L;
- Players allPlayers = new Players();
- static File managerFile;
- AgentBuilder builder;
- static Manager manager = null;
- public Manager(){
- }
- /**
- * Name of file containing managers's data
- * @return file containing serialization
- */
- public static File getPlayersFile(){
- return managerFile;
- }
- /**
- * Change pathname of file containing mnanager's data
- * @param managerFile
- */
- public static void setPlayersFile(java.io.File managerFile) {
- Manager.managerFile = managerFile;
- }
- /**
- * Returns the single instance of this class as proposed in the singleton design pattern. If a backup of this class is available then the manager is recreated from that data
- * @return instance of this class
- * @throws SoncException
- */
- public static Manager getInstance() throws SoncException {
- if(manager != null) {
- return manager;
- }
- else {
- try{
- manager = restore();
- return manager;
- }
- catch(Exception e) {
- manager = new Manager();
- throw new SoncException();
- }
- }
- }
- /* (non-Javadoc)
- * @see sonc.game.manager#register(java.lang.String, java.lang.String)
- */
- /* (non-Javadoc)
- * @see sonc.game.Manageritf#register(java.lang.String, java.lang.String)
- */
- @Override
- public boolean register(String userId, String password) throws SoncException {
- try{
- if(allPlayers.register(userId,password)) {
- backup();
- return true;
- }
- return false;
- } catch (Exception e) {
- throw new SoncException(e);
- }
- }
- /**
- * To save the file changes.
- * @throws SoncException
- */
- void backup() throws SoncException {
- try {
- FileOutputStream file = new FileOutputStream(managerFile);
- ObjectOutputStream out = new ObjectOutputStream(file);
- out.writeObject(this);
- out.close();
- } catch (Exception e) {
- throw new SoncException(e);
- }
- }
- /**
- * Read from file.
- * @return Manager
- */
- static Manager restore() throws SoncException {
- Manager manager;
- try {
- java.io.FileInputStream file = new java.io.FileInputStream(managerFile);
- java.io.ObjectInputStream in = new java.io.ObjectInputStream(file);
- manager = (Manager) in.readObject();
- in.close();
- }
- catch(Exception e) {
- throw new SoncException(e);
- }
- return manager;
- }
- /* (non-Javadoc)
- * @see sonc.game.manager#updatePassword(java.lang.String, java.lang.String, java.lang.String)
- */
- /* (non-Javadoc)
- * @see sonc.game.Manageritf#updatePassword(java.lang.String, java.lang.String, java.lang.String)
- */
- @Override
- public boolean updatePassword(String nick, String oldPassword, String newPassword) throws SoncException {
- try{
- if(allPlayers.updatePassword(nick,oldPassword, newPassword)) {
- backup();
- return true;
- }
- return false;
- } catch (Exception e) {
- throw new SoncException(e);
- }
- }
- /* (non-Javadoc)
- * @see sonc.game.manager#authenticate(java.lang.String, java.lang.String)
- */
- /* (non-Javadoc)
- * @see sonc.game.Manageritf#authenticate(java.lang.String, java.lang.String)
- */
- @Override
- public boolean authenticate(String nick, String password) {
- return allPlayers.authenticate(nick, password);
- }
- /* (non-Javadoc)
- * @see sonc.game.manager#getCurrentCode(java.lang.String, java.lang.String)
- */
- /* (non-Javadoc)
- * @see sonc.game.Manageritf#getCurrentCode(java.lang.String, java.lang.String)
- */
- @Override
- public String getCurrentCode(String nick, String password) throws SoncException {
- Player player = allPlayers.getPlayer(nick);
- if(player.authenticate(password))
- return player.getCode();
- else
- throw new SoncException();
- }
- /* (non-Javadoc)
- * @see sonc.game.manager#buildShip(java.lang.String, java.lang.String, java.lang.String)
- */
- /* (non-Javadoc)
- * @see sonc.game.Manageritf#buildShip(java.lang.String, java.lang.String, java.lang.String)
- */
- @Override
- public void buildShip(String nick, String password, String code) throws SoncException {
- Player player = allPlayers.getPlayer(nick);
- if(player.authenticate(password)) {
- player.setCode(code);
- player.checkCode();
- } else {
- throw new SoncException();
- }
- }
- /**
- * Returns a sorted list of all registered players' nicks with ships These nicks can be used in a simulation
- * @return
- */
- List<String> getPlayersNamesWithShips(){
- return allPlayers.getPlayersNamesWithShips();
- }
- /* (non-Javadoc)
- * @see sonc.game.manager#battle(java.util.List)
- */
- /* (non-Javadoc)
- * @see sonc.game.Manageritf#battle(java.util.List)
- */
- @Override
- public Movie battle(List<String> nicks) {
- World world = new World();
- List<Ship> ships = new LinkedList<Ship>();
- for(String n : getPlayersNamesWithShips()) {
- ships.add(allPlayers.getPlayer(n).instanceShip());
- }
- return world.battle(ships);
- }
- /**
- * Resets players for debugging purposes.
- */
- void reset() {
- manager = new Manager();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement