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

Quick Search    Search Deep

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


1   /**
2    *  Message that processes "paises=" events.
3    *  This message is valid for following protocols:
4    *    version 3: OK
5    *    version 4: ?
6    *    version 5: ?
7    *
8    *  Content = "paises=x/y:z(,y:z)*" (x: player_id; y: country_nb; z: nb_armies)
9    *
10   * @author Jef De Geeter
11   * @author Yves Vandewoude
12   */
13  
14  
15  package org.zazof.jteg;
16  
17  import java.util.StringTokenizer;
18  import java.util.NoSuchElementException;
19  
20  public class PlayerStatusMessage extends Message{
21  
22    public PlayerStatusMessage(Message nextMessage){
23      setNextMessage(nextMessage);
24    }
25  
26  
27    public Message decodeMessage(String messageDescription)
28      throws UnknownMessageException
29    {
30      String firstToken = (new StringTokenizer(messageDescription,"=")).nextToken();    
31      if (!(firstToken.equals("paises")))
32      {
33        // Not for me...
34        if (this.hasNextMessage())
35          {
36            return getNextMessage().decodeMessage(messageDescription);
37          }
38        throw new UnknownMessageException(messageDescription);
39      }
40      else
41      {
42        StringTokenizer st = new StringTokenizer(messageDescription, "=/");
43        if (DEBUG) System.out.println("Creating PlayerStatusMessage object: " + messageDescription);
44        $token = messageDescription;
45        st.nextToken(); //paises
46        $playerID = Integer.parseInt(st.nextToken());
47        try  
48          {
49        $statusToken = new StringTokenizer(st.nextToken(), ":,");
50          }
51        catch (NoSuchElementException exc)
52          {
53            // In protocol 5, the tegserver seems to send a paises message with playerID, but 
54            // Without a statustoken. In previous serverversions, the message just wasn't send
55            // Therefore, we ignore it...
56            throw new UnknownMessageException("Useless paises message is ignored for defeated player.");
57          }
58        return this;
59      }
60    }
61  
62    public String constructMessageString(String[] messageParts)
63      throws UnknownMessageException
64    {
65      if (!(messageParts[0]).equals("playerstatus"))
66      {
67        // Not for me...
68        if (this.hasNextMessage())
69          {
70            return getNextMessage().constructMessageString(messageParts);
71          }
72        throw new UnknownMessageException("No String could be constructed for a message with this parameter: " + messageParts[0]);
73      }
74      else
75      {
76        return ("paises=-1");
77      }
78    }
79  
80  
81    public String getMessageName(){
82      return "player_status";
83    }
84  
85    public String getMessage(){
86      return $token;
87    }
88  
89    public int getPlayerID(){
90      return $playerID;
91    }
92  
93    public boolean hasMoreStatusInformation(){
94      return $statusToken.hasMoreElements();
95    }
96  
97    public int getCountryID(){
98      return Integer.parseInt($statusToken.nextToken());
99    }
100 
101   public int getNbOfArmies(){
102     return Integer.parseInt($statusToken.nextToken());
103   }
104 
105   private StringTokenizer $statusToken; // y:z(,y:z)*
106   private int $playerID;
107   private String $token;
108   private static final boolean DEBUG = false;
109 }