Source code: org/zazof/jteg/StartMessage.java
1 /**
2 *
3 * An observer gets this messages "start=..." when it logs in
4 *
5 * Message that processes "start=" events.
6 * This message is valid for following protocols:
7 * version 3: OK
8 * version 4: ?
9 * version 5: ?
10 *
11 * Content = "start=player_name,color,player_id,x2,x3,x4,x5,x6(/player_name,y0,y1,y2,y3,y4,y5,y6)+"
12 *
13 * @author Jef De Geeter
14 * @author Yves Vandewoude
15 */
16
17
18 package org.zazof.jteg;
19
20 import java.util.StringTokenizer;
21 import java.util.Vector;
22
23 public class StartMessage extends Message{
24
25 public StartMessage(Message nextMessage){
26 setNextMessage(nextMessage);
27 }
28
29
30 public Message decodeMessage(String messageDescription)
31 throws UnknownMessageException
32 {
33 String firstToken = (new StringTokenizer(messageDescription,"=")).nextToken();
34 if (!(firstToken.equals("start")))
35 {
36 // Not for me...
37 if (this.hasNextMessage())
38 {
39 return getNextMessage().decodeMessage(messageDescription);
40 }
41 throw new UnknownMessageException(messageDescription);
42 }
43 else
44 {
45 if (DEBUG) System.out.println("Created StartMessage:" + messageDescription);
46 StringTokenizer st = new StringTokenizer(messageDescription, "=/");
47 st.nextToken(); //start
48 while(st.hasMoreTokens()){
49 $help.add(new PlayerHelp(st.nextToken()));
50 $counter++;
51 }
52 return this;
53 }
54 }
55
56
57 public String constructMessageString(String[] messageParts)
58 throws UnknownMessageException
59 {
60 if (!(messageParts[0]).equals("startgame"))
61 {
62 // Not for me...
63 if (this.hasNextMessage())
64 {
65 return getNextMessage().constructMessageString(messageParts);
66 }
67 throw new UnknownMessageException("No String could be constructed for a message with this parameter: " + messageParts[0]);
68 }
69 else
70 {
71 return ("start");
72 }
73 }
74
75
76 /**
77 * @return "start"
78 */
79 public String getMessageName(){
80 return "start";
81 }
82
83 /**
84 * returns true if there is more player information in this message
85 */
86 public boolean hasMoreInformation(){
87 return ($index < $counter);
88 }
89
90 /**
91 * resets the information pointer, so you could start back at the beginning
92 */
93 public void resetInformation(){
94 $index = 0;
95 }
96
97 /**
98 * if you want to access the next information object
99 */
100 public void nextInformation(){
101 $index++;
102 }
103
104 /**
105 * @return name of the player of the current information item
106 */
107 public String getPlayerName(){
108 return ((PlayerHelp)$help.elementAt($index)).getPlayerName();
109 }
110
111 /**
112 * @return color of the player of the current information item
113 */
114 public int getPlayerColor(){
115 return ((PlayerHelp)$help.elementAt($index)).getPlayerColor();
116 }
117
118 /**
119 * @return id of the player of the current information item
120 */
121 public int getPlayerID(){
122 return ((PlayerHelp)$help.elementAt($index)).getPlayerID();
123 }
124
125 // vector help contains several (counter) PlayerHelp objects.
126 private Vector $help = new Vector(6);
127 // counter counts the number of PlayerHelp objects held by the vector help.
128 private int $counter = 0;
129 // index is used to access the current PlayerHelp object
130 private int $index = 0;
131 private static final boolean DEBUG = false;
132 }
133