7 use super::{ |
7 use super::{ |
8 messages::{HWProtocolMessage, HWProtocolMessage::*}, |
8 messages::{HWProtocolMessage, HWProtocolMessage::*}, |
9 test::gen_proto_msg |
9 test::gen_proto_msg |
10 }; |
10 }; |
11 use server::coretypes::{ |
11 use server::coretypes::{ |
12 HedgehogInfo, TeamInfo |
12 HedgehogInfo, TeamInfo, GameCfg |
13 }; |
13 }; |
14 |
14 |
15 named!(end_of_message, tag!("\n\n")); |
15 named!(end_of_message, tag!("\n\n")); |
16 named!(str_line<&[u8], &str>, map_res!(not_line_ending, str::from_utf8)); |
16 named!(str_line<&[u8], &str>, map_res!(not_line_ending, str::from_utf8)); |
17 named!( a_line<&[u8], String>, map!(str_line, String::from)); |
17 named!( a_line<&[u8], String>, map!(str_line, String::from)); |
137 r: a_line >> eol >> |
137 r: a_line >> eol >> |
138 t: u32_line >> |
138 t: u32_line >> |
139 (BanNick(n, r, t))) |
139 (BanNick(n, r, t))) |
140 )); |
140 )); |
141 |
141 |
|
142 named!(cfg_message<&[u8], HWProtocolMessage>, preceded!(tag!("CFG\n"), map!(alt!( |
|
143 do_parse!(tag!("THEME") >> eol >> |
|
144 name: a_line >> |
|
145 (GameCfg::Theme(name))) |
|
146 | do_parse!(tag!("SCRIPT") >> eol >> |
|
147 name: a_line >> |
|
148 (GameCfg::Script(name))) |
|
149 | do_parse!(tag!("AMMO") >> eol >> |
|
150 name: a_line >> |
|
151 value: opt_param >> |
|
152 (GameCfg::Ammo(name, value))) |
|
153 | do_parse!(tag!("SCHEME") >> eol >> |
|
154 name: a_line >> eol >> |
|
155 values: separated_list!(eol, a_line) >> |
|
156 (GameCfg::Scheme(name, |
|
157 if values.is_empty() {None} else {Some(values)}))) |
|
158 | do_parse!(tag!("FEATURE_SIZE") >> eol >> |
|
159 value: u32_line >> |
|
160 (GameCfg::FeatureSize(value))) |
|
161 | do_parse!(tag!("MAP") >> eol >> |
|
162 value: a_line >> |
|
163 (GameCfg::MapType(value))) |
|
164 | do_parse!(tag!("MAPGEN") >> eol >> |
|
165 value: u32_line >> |
|
166 (GameCfg::MapGenerator(value))) |
|
167 | do_parse!(tag!("MAZE_SIZE") >> eol >> |
|
168 value: u32_line >> |
|
169 (GameCfg::MazeSize(value))) |
|
170 | do_parse!(tag!("SEED") >> eol >> |
|
171 value: a_line >> |
|
172 (GameCfg::Seed(value))) |
|
173 | do_parse!(tag!("TEMPLATE") >> eol >> |
|
174 value: u32_line >> |
|
175 (GameCfg::Template(value))) |
|
176 | do_parse!(tag!("DRAWNMAP") >> eol >> |
|
177 value: a_line >> |
|
178 (GameCfg::DrawnMap(value))) |
|
179 ), Cfg))); |
|
180 |
142 named!(malformed_message<&[u8], HWProtocolMessage>, |
181 named!(malformed_message<&[u8], HWProtocolMessage>, |
143 do_parse!(separated_list!(eol, a_line) >> (Malformed))); |
182 do_parse!(separated_list!(eol, a_line) >> (Malformed))); |
144 |
183 |
145 named!(empty_message<&[u8], HWProtocolMessage>, |
184 named!(empty_message<&[u8], HWProtocolMessage>, |
146 do_parse!(alt!(end_of_message | eol) >> (Empty))); |
185 do_parse!(alt!(end_of_message | eol) >> (Empty))); |