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 }