Advertisement
Guest User

managerIvo

a guest
May 27th, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.99 KB | None | 0 0
  1. package sonc.game;
  2.  
  3. import java.util.List;
  4. import java.io.File;
  5. import java.io.FileOutputStream;
  6. import java.io.ObjectOutputStream;
  7. import java.io.Serializable;
  8. import java.util.LinkedList;
  9.  
  10. import sonc.battle.Ship;
  11. import sonc.battle.World;
  12. import sonc.shared.Movie;
  13. import sonc.shared.SoncException;
  14. import sonc.utils.AgentBuilder;
  15.  
  16. /**
  17. * 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
  18. *
  19. */
  20. public class Manager implements Serializable, Manageritf{
  21. private static final long serialVersionUID = 1L;
  22. Players allPlayers = new Players();
  23. static File managerFile;
  24. AgentBuilder builder;
  25. static Manager manager = null;
  26.  
  27. public Manager(){
  28.  
  29. }
  30.  
  31. /**
  32. * Name of file containing managers's data
  33. * @return file containing serialization
  34. */
  35. public static File getPlayersFile(){
  36. return managerFile;
  37. }
  38.  
  39. /**
  40. * Change pathname of file containing mnanager's data
  41. * @param managerFile
  42. */
  43. public static void setPlayersFile(java.io.File managerFile) {
  44. Manager.managerFile = managerFile;
  45. }
  46.  
  47. /**
  48. * 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
  49. * @return instance of this class
  50. * @throws SoncException
  51. */
  52.  
  53.  
  54. public static Manager getInstance() throws SoncException {
  55. if(manager != null) {
  56. return manager;
  57. }
  58. else {
  59. try{
  60. manager = restore();
  61. return manager;
  62. }
  63. catch(Exception e) {
  64. manager = new Manager();
  65. throw new SoncException();
  66. }
  67. }
  68. }
  69.  
  70. /* (non-Javadoc)
  71. * @see sonc.game.manager#register(java.lang.String, java.lang.String)
  72. */
  73. /* (non-Javadoc)
  74. * @see sonc.game.Manageritf#register(java.lang.String, java.lang.String)
  75. */
  76. @Override
  77. public boolean register(String userId, String password) throws SoncException {
  78. try{
  79. if(allPlayers.register(userId,password)) {
  80. backup();
  81. return true;
  82. }
  83. return false;
  84. } catch (Exception e) {
  85. throw new SoncException(e);
  86. }
  87. }
  88.  
  89. /**
  90. * To save the file changes.
  91. * @throws SoncException
  92. */
  93. void backup() throws SoncException {
  94. try {
  95. FileOutputStream file = new FileOutputStream(managerFile);
  96. ObjectOutputStream out = new ObjectOutputStream(file);
  97. out.writeObject(this);
  98. out.close();
  99. } catch (Exception e) {
  100. throw new SoncException(e);
  101. }
  102. }
  103.  
  104. /**
  105. * Read from file.
  106. * @return Manager
  107. */
  108. static Manager restore() throws SoncException {
  109. Manager manager;
  110.  
  111. try {
  112. java.io.FileInputStream file = new java.io.FileInputStream(managerFile);
  113. java.io.ObjectInputStream in = new java.io.ObjectInputStream(file);
  114. manager = (Manager) in.readObject();
  115. in.close();
  116. }
  117. catch(Exception e) {
  118. throw new SoncException(e);
  119. }
  120.  
  121. return manager;
  122.  
  123. }
  124.  
  125. /* (non-Javadoc)
  126. * @see sonc.game.manager#updatePassword(java.lang.String, java.lang.String, java.lang.String)
  127. */
  128. /* (non-Javadoc)
  129. * @see sonc.game.Manageritf#updatePassword(java.lang.String, java.lang.String, java.lang.String)
  130. */
  131. @Override
  132. public boolean updatePassword(String nick, String oldPassword, String newPassword) throws SoncException {
  133. try{
  134. if(allPlayers.updatePassword(nick,oldPassword, newPassword)) {
  135. backup();
  136. return true;
  137. }
  138. return false;
  139. } catch (Exception e) {
  140. throw new SoncException(e);
  141. }
  142. }
  143.  
  144. /* (non-Javadoc)
  145. * @see sonc.game.manager#authenticate(java.lang.String, java.lang.String)
  146. */
  147. /* (non-Javadoc)
  148. * @see sonc.game.Manageritf#authenticate(java.lang.String, java.lang.String)
  149. */
  150. @Override
  151. public boolean authenticate(String nick, String password) {
  152. return allPlayers.authenticate(nick, password);
  153. }
  154.  
  155. /* (non-Javadoc)
  156. * @see sonc.game.manager#getCurrentCode(java.lang.String, java.lang.String)
  157. */
  158. /* (non-Javadoc)
  159. * @see sonc.game.Manageritf#getCurrentCode(java.lang.String, java.lang.String)
  160. */
  161. @Override
  162. public String getCurrentCode(String nick, String password) throws SoncException {
  163. Player player = allPlayers.getPlayer(nick);
  164. if(player.authenticate(password))
  165. return player.getCode();
  166. else
  167. throw new SoncException();
  168. }
  169.  
  170. /* (non-Javadoc)
  171. * @see sonc.game.manager#buildShip(java.lang.String, java.lang.String, java.lang.String)
  172. */
  173. /* (non-Javadoc)
  174. * @see sonc.game.Manageritf#buildShip(java.lang.String, java.lang.String, java.lang.String)
  175. */
  176. @Override
  177. public void buildShip(String nick, String password, String code) throws SoncException {
  178. Player player = allPlayers.getPlayer(nick);
  179. if(player.authenticate(password)) {
  180. player.setCode(code);
  181. player.checkCode();
  182. } else {
  183. throw new SoncException();
  184. }
  185. }
  186.  
  187.  
  188. /**
  189. * Returns a sorted list of all registered players' nicks with ships These nicks can be used in a simulation
  190. * @return
  191. */
  192. List<String> getPlayersNamesWithShips(){
  193. return allPlayers.getPlayersNamesWithShips();
  194. }
  195.  
  196. /* (non-Javadoc)
  197. * @see sonc.game.manager#battle(java.util.List)
  198. */
  199. /* (non-Javadoc)
  200. * @see sonc.game.Manageritf#battle(java.util.List)
  201. */
  202. @Override
  203. public Movie battle(List<String> nicks) {
  204. World world = new World();
  205.  
  206. List<Ship> ships = new LinkedList<Ship>();
  207.  
  208. for(String n : getPlayersNamesWithShips()) {
  209. ships.add(allPlayers.getPlayer(n).instanceShip());
  210. }
  211.  
  212. return world.battle(ships);
  213. }
  214.  
  215. /**
  216. * Resets players for debugging purposes.
  217. */
  218. void reset() {
  219. manager = new Manager();
  220. }
  221.  
  222. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement