Docjar: A Java Source and Docuemnt Enginecom.*    java.*    javax.*    org.*    all    new    plug-in

Quick Search    Search Deep

Source code: org/zazof/jteg/GameController.java


1   package org.zazof.jteg;
2   
3   import java.io.IOException;
4   import javax.swing.JOptionPane;
5   
6   /**
7    * responsible for the general control of the game
8    *
9    * @author Jef De Geeter
10   * @date August 2001
11   */
12  public class GameController implements MessageListener{
13  
14    /**
15     * private constructor because this class is a singleton
16     */
17    private GameController(){
18      $playerList = new PlayerList();
19      $boardModel = new BoardModel($playerList);
20      $boardController = new BoardController($boardModel);
21      $cardController = new CardController();
22      MessageManager.getInstance().addMessageListener(this);
23    }
24  
25    /**
26     * @return the unique instance of this class
27     */
28    public static GameController getInstance(){
29      if (instance == null) instance = new GameController();
30      return instance;
31    }
32  
33    /**
34     * makes a connection with the server
35     *
36     * @param playerMode 0 = observer or 1 = player
37     */
38    public void connectToServer(String server, int port, String playerName, int playerMode){
39      $playerMode = playerMode;
40      try{
41        MessageManager.getInstance().makeConnectionWithServer(server, port);
42        String[] messageParts = {"newplayer", playerName, Integer.toString(playerMode)};
43        MessageManager.getInstance().sendToServer(messageParts);
44        MessageManager.getInstance().startThread();
45      }
46      catch (ServerException exc){
47        if (DEBUG) System.out.println("Error handling in GameController!");
48        JOptionPane.showMessageDialog(null, exc.getMessage(), "Error message", JOptionPane.ERROR_MESSAGE);
49        JTEGStateMachine.getInstance().setCurrentState(JTEGStateMachine.DISCONNECTED);
50      }
51      catch (IOException exc) {
52        if (DEBUG) System.out.println("Error handling in GameController!");
53        JOptionPane.showMessageDialog(null, "No Server found on the address/port specified", "Error message", JOptionPane.ERROR_MESSAGE);
54        JTEGStateMachine.getInstance().setCurrentState(JTEGStateMachine.DISCONNECTED);
55      }
56      catch (UnknownMessageException exc) {
57        // This should never happen...
58        exc.printStackTrace();
59        System.out.println(exc.getMessage());
60      }  
61    }
62  
63    public void startGame(int gameType)
64      {
65      try
66        {
67        // First we request a mission
68        String[] messageParts={"mission", Integer.toString(gameType)};
69        MessageManager.getInstance().sendToServer(messageParts);
70        // And then we initiate the start of a game
71        String[] other = {"startgame"};
72        MessageManager.getInstance().sendToServer(other);
73        }
74      catch (ServerException exc){
75        // Should never happen!
76        if (DEBUG) System.out.println("Error handling in GameController while starting game!");
77        JOptionPane.showMessageDialog(null, exc.getMessage(), "Error message", JOptionPane.ERROR_MESSAGE);
78        JTEGStateMachine.getInstance().setCurrentState(JTEGStateMachine.DISCONNECTED);
79      }
80      catch (UnknownMessageException exc) {
81        // This should never happen...
82        exc.printStackTrace();
83        System.out.println(exc.getMessage());
84      }        
85      }
86  
87    /**
88     * @return the mode of this game: 0 = observer, 1 = player
89     */
90    public int getPlayerMode(){
91      return $playerMode;
92    }
93  
94    public PlayerList getPlayerList(){
95      return $playerList;
96    }
97  
98    public CountryList getCountryList(){
99      return $boardModel.getCountryList();
100   }
101 
102 
103 
104   public void messageArrived(Message m){
105     try{
106       if (m.getMessageName().equals("new_player")){
107         NewPlayerMessage npm;
108         npm = (NewPlayerMessage) m;
109         if (DEBUG) System.out.println("New player " + npm.getNewPlayerName() + " arrived in GameController");
110         $playerList.addPlayer(new Player(npm.getNewPlayerName(), npm.getNewPlayerColor(), npm.getNewPlayerNumber()));
111       }
112       if (m.getMessageName().equals("turno")){
113         // we have a turno message, so we send to the server "paises=-1"
114         TurnMessage tm = (TurnMessage) m;
115         MessageManager.getInstance().askPlayerStatus();
116       }
117       if (m.getMessageName().equals("start")){
118         // we have a start message, so we can fill the playerlist
119         if (DEBUG) System.out.println("GameController: received StartMessage");
120         JTEGStateMachine.getInstance().setCurrentState(JTEGStateMachine.GAME_STARTED);
121         StartMessage sm = (StartMessage) m;
122         Player tmp;
123         while (sm.hasMoreInformation()){
124           tmp = new Player(sm.getPlayerName(), sm.getPlayerColor(), sm.getPlayerID());
125           if (DEBUG) System.out.println("added player " + tmp.getName() + " with id: " + tmp.getID() + " with color: " + tmp.getColorID());
126           $playerList.addPlayer(tmp);
127           sm.nextInformation();
128         }
129         MessageManager.getInstance().askPlayerStatus();
130       }
131       if (m.getMessageName().equals("status")){
132         // we have a status message, so we can fill the playerlist
133         if (DEBUG) System.out.println("GameController: received StatusMessage");
134         StatusMessage sm = (StatusMessage) m;
135         Player tmp;
136         while (sm.hasMoreInformation()){
137           tmp = new Player(sm.getPlayerName(), sm.getPlayerColor(), sm.getPlayerID());
138           if (DEBUG) System.out.println("added player " + tmp.getName() + " with id: " + tmp.getID() + " with color: " + tmp.getColorID());
139           $playerList.addPlayer(tmp);
140           sm.nextInformation();
141         }
142       }
143       if (m.getMessageName().equals("player_id")){
144         if (DEBUG) System.out.println("GameController: received ClientPlayerMessage");
145         ClientPlayerMessage cpm = (ClientPlayerMessage) m;
146         setClientPlayerID(cpm.getClientPlayerNumber());
147         // we ask the status, because other players may be connected before us. So
148         // we can know which colors are already taken by other players.
149         String[] params = {"status"};
150         MessageManager.getInstance().sendToServer(params);
151       }
152       if (m.getMessageName().equals("mission")){
153         if (DEBUG) System.out.println("GameController: received ClientPlayerMessage");
154         MissionMessage mm = (MissionMessage) m;
155         if ((mm.getMissionType() == 1) && (mm.getMissionNumber() == 0))
156         {
157           // We know that we have a secret mission
158           // We don't know which one.. So we'll have to request it...
159           String[] params = {"askprivatemission"};
160           MessageManager.getInstance().sendToServer(params);
161         }
162       }      
163     }
164     catch (Exception exc){
165       exc.printStackTrace();
166       JOptionPane.showMessageDialog(null, exc.getMessage(), "Error message", JOptionPane.ERROR_MESSAGE);
167     }
168   }
169 
170   public BoardModel getBoardModel()
171       {
172         return $boardModel;
173       }
174 
175   public BoardController getBoardController()
176       {
177         return $boardController;
178       }
179 
180   public CardController getCardController()
181       {
182         return $cardController;
183       }
184 
185 
186   public Player getClientPlayer(){
187     try
188     {
189       Player clientPlayer = $playerList.getPlayer($clientPlayer);
190             return clientPlayer;
191     }
192     catch (Exception e)
193     {
194       System.out.println("Exception thrown in getClientPlayer() with message: " + e.getMessage());
195       e.printStackTrace();
196             return null;
197     }
198   }
199 
200   public void setClientPlayerID(int id){
201     $clientPlayer = id;
202   }
203 
204 
205   public String getBoardMapFileName()
206     {
207       return BoardModel.getBoardMapFileName();
208     }
209 
210 
211   /**
212    * o = observer, 1 = player
213    */
214   private int $playerMode;
215   /**
216    * id of the player who's behind this client
217    */
218   private int $clientPlayer;
219   
220   private static GameController instance;
221   private PlayerList $playerList;
222   private static final boolean DEBUG = false;
223   private BoardModel $boardModel;
224   private BoardController $boardController;
225   private CardController $cardController;
226 }