|
1 use super::coretypes::ClientId; |
|
2 use bitflags::*; |
|
3 |
|
4 bitflags!{ |
|
5 pub struct ClientFlags: u8 { |
|
6 const IS_ADMIN = 0b0000_0001; |
|
7 const IS_MASTER = 0b0000_0010; |
|
8 const IS_READY = 0b0000_0100; |
|
9 const IS_IN_GAME = 0b0000_1000; |
|
10 const IS_JOINED_MID_GAME = 0b0001_0000; |
|
11 const IS_CHECKER = 0b0010_0000; |
|
12 |
|
13 const NONE = 0b0000_0000; |
|
14 const DEFAULT = Self::NONE.bits; |
|
15 } |
|
16 } |
|
17 |
|
18 pub struct HWClient { |
|
19 pub id: ClientId, |
|
20 pub room_id: Option<usize>, |
|
21 pub nick: String, |
|
22 pub web_password: String, |
|
23 pub server_salt: String, |
|
24 pub protocol_number: u16, |
|
25 pub flags: ClientFlags, |
|
26 pub teams_in_game: u8, |
|
27 pub team_indices: Vec<u8>, |
|
28 pub clan: Option<u8> |
|
29 } |
|
30 |
|
31 impl HWClient { |
|
32 pub fn new(id: ClientId, salt: String) -> HWClient { |
|
33 HWClient { |
|
34 id, |
|
35 room_id: None, |
|
36 nick: String::new(), |
|
37 web_password: String::new(), |
|
38 server_salt: salt, |
|
39 protocol_number: 0, |
|
40 flags: ClientFlags::DEFAULT, |
|
41 teams_in_game: 0, |
|
42 team_indices: Vec::new(), |
|
43 clan: None, |
|
44 } |
|
45 } |
|
46 |
|
47 fn contains(& self, mask: ClientFlags) -> bool { |
|
48 self.flags.contains(mask) |
|
49 } |
|
50 |
|
51 fn set(&mut self, mask: ClientFlags, value: bool) { |
|
52 self.flags.set(mask, value); |
|
53 } |
|
54 |
|
55 pub fn is_admin(&self)-> bool { self.contains(ClientFlags::IS_ADMIN) } |
|
56 pub fn is_master(&self)-> bool { self.contains(ClientFlags::IS_MASTER) } |
|
57 pub fn is_ready(&self)-> bool { self.contains(ClientFlags::IS_READY) } |
|
58 pub fn is_in_game(&self)-> bool { self.contains(ClientFlags::IS_IN_GAME) } |
|
59 pub fn is_joined_mid_game(&self)-> bool { self.contains(ClientFlags::IS_JOINED_MID_GAME) } |
|
60 pub fn is_checker(&self)-> bool { self.contains(ClientFlags::IS_CHECKER) } |
|
61 |
|
62 pub fn set_is_admin(&mut self, value: bool) { self.set(ClientFlags::IS_ADMIN, value) } |
|
63 pub fn set_is_master(&mut self, value: bool) { self.set(ClientFlags::IS_MASTER, value) } |
|
64 pub fn set_is_ready(&mut self, value: bool) { self.set(ClientFlags::IS_READY, value) } |
|
65 pub fn set_is_in_game(&mut self, value: bool) { self.set(ClientFlags::IS_IN_GAME, value) } |
|
66 pub fn set_is_joined_mid_game(&mut self, value: bool) { self.set(ClientFlags::IS_JOINED_MID_GAME, value) } |
|
67 pub fn set_is_checker(&mut self, value: bool) { self.set(ClientFlags::IS_CHECKER, value) } |
|
68 } |