152 impl SyncedEngineMessage { |
155 impl SyncedEngineMessage { |
153 fn to_bytes(&self) -> Vec<u8> { |
156 fn to_bytes(&self) -> Vec<u8> { |
154 use self::KeystrokeAction::*; |
157 use self::KeystrokeAction::*; |
155 use self::SyncedEngineMessage::*; |
158 use self::SyncedEngineMessage::*; |
156 match self { |
159 match self { |
157 Left(Press) => em!['L'], |
160 Left(Press) => em![b'L'], |
158 Left(Release) => em!['l'], |
161 Left(Release) => em![b'l'], |
159 Right(Press) => em!['R'], |
162 Right(Press) => em![b'R'], |
160 Right(Release) => em!['r'], |
163 Right(Release) => em![b'r'], |
161 Up(Press) => em!['U'], |
164 Up(Press) => em![b'U'], |
162 Up(Release) => em!['u'], |
165 Up(Release) => em![b'u'], |
163 Down(Press) => em!['D'], |
166 Down(Press) => em![b'D'], |
164 Down(Release) => em!['d'], |
167 Down(Release) => em![b'd'], |
165 Precise(Press) => em!['Z'], |
168 Precise(Press) => em![b'Z'], |
166 Precise(Release) => em!['z'], |
169 Precise(Release) => em![b'z'], |
167 Attack(Press) => em!['A'], |
170 Attack(Press) => em![b'A'], |
168 Attack(Release) => em!['a'], |
171 Attack(Release) => em![b'a'], |
169 NextTurn => em!['N'], |
172 NextTurn => em![b'N'], |
170 Switch => em!['S'], |
173 Switch => em![b'S'], |
171 Timer(t) => vec!['0' as u8 + t], |
174 Timer(t) => vec![b'0' + t], |
172 Slot(s) => vec!['~' as u8, *s], |
175 Slot(s) => vec![b'~' , *s], |
173 SetWeapon(s) => vec!['~' as u8, *s], |
176 SetWeapon(s) => vec![b'~', *s], |
174 Put(x, y) => unimplemented!(), |
177 Put(x, y) => { |
175 CursorMove(x, y) => unimplemented!(), |
178 let mut v = vec![b'p']; |
176 HighJump => em!['J'], |
179 v.write_i24::<BigEndian>(*x).unwrap(); |
177 LongJump => em!['j'], |
180 v.write_i24::<BigEndian>(*y).unwrap(); |
178 Skip => em![','], |
181 |
179 TeamControlGained(str) => ems!['g', str], |
182 v |
180 TeamControlLost(str) => ems!['f', str], |
183 }, |
181 Taunt(s) => vec!['t' as u8, *s], |
184 CursorMove(x, y) => { |
182 HogSay(str) => ems!['h', str], |
185 let mut v = vec![b'P']; |
183 Heartbeat => em!['+'], |
186 v.write_i24::<BigEndian>(*x).unwrap(); |
|
187 v.write_i24::<BigEndian>(*y).unwrap(); |
|
188 |
|
189 v |
|
190 }, |
|
191 HighJump => em![b'J'], |
|
192 LongJump => em![b'j'], |
|
193 Skip => em![b','], |
|
194 TeamControlGained(str) => ems![b'g', str], |
|
195 TeamControlLost(str) => ems![b'f', str], |
|
196 Taunt(s) => vec![b't', *s], |
|
197 HogSay(str) => ems![b'h', str], |
|
198 Heartbeat => em![b'+'], |
184 TimeWrap => unreachable!(), |
199 TimeWrap => unreachable!(), |
185 } |
200 } |
186 } |
201 } |
187 } |
202 } |
188 |
203 |
189 impl UnsyncedEngineMessage { |
204 impl UnsyncedEngineMessage { |
190 fn to_bytes(&self) -> Vec<u8> { |
205 fn to_bytes(&self) -> Vec<u8> { |
191 use self::UnsyncedEngineMessage::*; |
206 use self::UnsyncedEngineMessage::*; |
192 match self { |
207 match self { |
193 TeamControlGained(str) => ems!['G', str], |
208 TeamControlGained(str) => ems![b'G', str], |
194 TeamControlLost(str) => ems!['F', str], |
209 TeamControlLost(str) => ems![b'F', str], |
195 } |
210 } |
196 } |
211 } |
197 } |
212 } |
198 |
213 |
199 impl UnorderedEngineMessage { |
214 impl UnorderedEngineMessage { |
200 fn to_bytes(&self) -> Vec<u8> { |
215 fn to_bytes(&self) -> Vec<u8> { |
201 unimplemented!() |
216 use self::UnorderedEngineMessage::*; |
|
217 match self { |
|
218 Ping => em![b'?'], |
|
219 Pong => em![b'!'], |
|
220 ChatMessage(str) => ems![b's', str], |
|
221 TeamMessage(str) => ems![b'b', str], |
|
222 Error(str) => ems![b'E', str], |
|
223 Warning(str) => unreachable!(), |
|
224 StopSyncing => unreachable!(), |
|
225 GameOver => em![b'q'], |
|
226 GameInterrupted => em![b'Q'], |
|
227 GameSetupChecksum(str) => ems![b'M', str], |
|
228 PauseToggled => unreachable!(), |
|
229 } |
202 } |
230 } |
203 } |
231 } |
204 |
232 |
205 impl ConfigEngineMessage { |
233 impl ConfigEngineMessage { |
206 fn to_bytes(&self) -> Vec<u8> { |
234 fn to_bytes(&self) -> Vec<u8> { |
207 unimplemented!() |
235 unreachable!() |
208 } |
236 } |
209 } |
237 } |
210 |
238 |
211 impl EngineMessage { |
239 impl EngineMessage { |
212 pub const MAX_LEN: u16 = 49215; |
240 pub const MAX_LEN: u16 = 49215; |