1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
pub mod client_packets;
pub mod server_packets;
#[cfg(test)]
mod test;
pub use crate::packet::serde::{PacketRead, PacketWrite, Result};
pub trait AdminRead {
fn read_packet(&mut self) -> Result<server_packets::Packet>;
}
impl<T: PacketRead> AdminRead for T {
fn read_packet(&mut self) -> Result<server_packets::Packet> {
let (packet_type, buffer) = PacketRead::read_packet(self)?;
use crate::packet::serde::from_bytes;
use server_packets::Packet::*;
Ok(match packet_type {
100 => Full,
101 => Banned,
102 => Error(from_bytes(&buffer)?),
103 => Protocol(from_bytes(&buffer)?),
104 => Welcome(from_bytes(&buffer)?),
105 => Newgame,
106 => Shutdown,
107 => Date(from_bytes(&buffer)?),
108 => ClientJoin(from_bytes(&buffer)?),
109 => ClientInfo(from_bytes(&buffer)?),
110 => ClientUpdate(from_bytes(&buffer)?),
111 => ClientQuit(from_bytes(&buffer)?),
112 => ClientError(from_bytes(&buffer)?),
113 => CompanyNew(from_bytes(&buffer)?),
114 => CompanyInfo(from_bytes(&buffer)?),
115 => CompanyUpdate(from_bytes(&buffer)?),
116 => CompanyRemove(from_bytes(&buffer)?),
117 => CompanyEconomy(from_bytes(&buffer)?),
118 => CompanyStats(from_bytes(&buffer)?),
119 => Chat(from_bytes(&buffer)?),
120 => Rcon(from_bytes(&buffer)?),
121 => Console(from_bytes(&buffer)?),
122 => CmdNames(from_bytes(&buffer)?),
123 => CmdLogging(from_bytes(&buffer)?),
124 => Gamescript(from_bytes(&buffer)?),
125 => RconEnd(from_bytes(&buffer)?),
126 => Pong(from_bytes(&buffer)?),
_ => UnknownPacket {
packet_type,
buffer,
},
})
}
}
pub trait AdminWrite<T: client_packets::Packet> {
fn write_packet(&mut self, value: &T) -> Result<()>;
}
impl<T: client_packets::Packet, W: PacketWrite<T>> AdminWrite<T> for W {
fn write_packet(&mut self, value: &T) -> Result<()> {
self.write_packet(value)
}
}