adding checksum test (#3)
This commit is contained in:
parent
dcafba49b5
commit
efb773276b
@ -31,7 +31,8 @@ pub enum CharacterError {
|
|||||||
pub enum RecvCharacterPacket {
|
pub enum RecvCharacterPacket {
|
||||||
Login(Login),
|
Login(Login),
|
||||||
RequestSettings(RequestSettings),
|
RequestSettings(RequestSettings),
|
||||||
CharSelect(CharSelect)
|
CharSelect(CharSelect),
|
||||||
|
Checksum(Checksum),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl RecvServerPacket for RecvCharacterPacket {
|
impl RecvServerPacket for RecvCharacterPacket {
|
||||||
@ -40,6 +41,7 @@ impl RecvServerPacket for RecvCharacterPacket {
|
|||||||
0x93 => Ok(RecvCharacterPacket::Login(Login::from_bytes(data)?)),
|
0x93 => Ok(RecvCharacterPacket::Login(Login::from_bytes(data)?)),
|
||||||
0xE0 => Ok(RecvCharacterPacket::RequestSettings(RequestSettings::from_bytes(data)?)),
|
0xE0 => Ok(RecvCharacterPacket::RequestSettings(RequestSettings::from_bytes(data)?)),
|
||||||
0xE3 => Ok(RecvCharacterPacket::CharSelect(CharSelect::from_bytes(data)?)),
|
0xE3 => Ok(RecvCharacterPacket::CharSelect(CharSelect::from_bytes(data)?)),
|
||||||
|
0x1E8 => Ok(RecvCharacterPacket::Checksum(Checksum::from_bytes(data)?)),
|
||||||
_ => Err(PacketParseError::WrongPacketForServerType)
|
_ => Err(PacketParseError::WrongPacketForServerType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -52,6 +54,7 @@ pub enum SendCharacterPacket {
|
|||||||
LoginWelcome(LoginWelcome),
|
LoginWelcome(LoginWelcome),
|
||||||
SendKeyAndTeamSettings(SendKeyAndTeamSettings),
|
SendKeyAndTeamSettings(SendKeyAndTeamSettings),
|
||||||
CharAck(CharAck),
|
CharAck(CharAck),
|
||||||
|
ChecksumAck(ChecksumAck),
|
||||||
}
|
}
|
||||||
|
|
||||||
impl SendServerPacket for SendCharacterPacket {
|
impl SendServerPacket for SendCharacterPacket {
|
||||||
@ -61,6 +64,7 @@ impl SendServerPacket for SendCharacterPacket {
|
|||||||
SendCharacterPacket::LoginWelcome(pkt) => pkt.as_bytes(),
|
SendCharacterPacket::LoginWelcome(pkt) => pkt.as_bytes(),
|
||||||
SendCharacterPacket::SendKeyAndTeamSettings(pkt) => pkt.as_bytes(),
|
SendCharacterPacket::SendKeyAndTeamSettings(pkt) => pkt.as_bytes(),
|
||||||
SendCharacterPacket::CharAck(pkt) => pkt.as_bytes(),
|
SendCharacterPacket::CharAck(pkt) => pkt.as_bytes(),
|
||||||
|
SendCharacterPacket::ChecksumAck(pkt) => pkt.as_bytes(),
|
||||||
//SendLoginPacket::RedirectClient(pkt) => pkt.as_bytes(),
|
//SendLoginPacket::RedirectClient(pkt) => pkt.as_bytes(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -115,6 +119,13 @@ impl<DA: DataAccess> CharacterServerState<DA> {
|
|||||||
code: 2,
|
code: 2,
|
||||||
})]
|
})]
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn validate_checksum(&mut self) -> Vec<SendCharacterPacket> {
|
||||||
|
vec![SendCharacterPacket::ChecksumAck(ChecksumAck {
|
||||||
|
flag: 0,
|
||||||
|
ack: 1,
|
||||||
|
})]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl<DA: DataAccess> ServerState for CharacterServerState<DA> {
|
impl<DA: DataAccess> ServerState for CharacterServerState<DA> {
|
||||||
@ -147,6 +158,9 @@ impl<DA: DataAccess> ServerState for CharacterServerState<DA> {
|
|||||||
RecvCharacterPacket::CharSelect(sel) => {
|
RecvCharacterPacket::CharSelect(sel) => {
|
||||||
Box::new(self.char_select(sel).into_iter())
|
Box::new(self.char_select(sel).into_iter())
|
||||||
}
|
}
|
||||||
|
RecvCharacterPacket::Checksum(checksum) => {
|
||||||
|
Box::new(self.validate_checksum().into_iter())
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -200,4 +214,17 @@ mod test {
|
|||||||
assert!(bytes[2] == 0xE2);
|
assert!(bytes[2] == 0xE2);
|
||||||
assert!(bytes.len() == 0xAFC);
|
assert!(bytes.len() == 0xAFC);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
#[test]
|
||||||
|
fn test_user_checksum() {
|
||||||
|
struct TestData {}
|
||||||
|
impl DataAccess for TestData{}
|
||||||
|
let shared = SharedLoginState::new(TestData {});
|
||||||
|
let mut server = CharacterServerState::new(shared);
|
||||||
|
let send = server.handle(&RecvCharacterPacket::Checksum(Checksum {flag: 0})).collect::<Vec<_>>();
|
||||||
|
assert!(send.len() == 1);
|
||||||
|
|
||||||
|
let bytes = send[0].as_bytes();
|
||||||
|
assert!(bytes == [0xC, 0, 0xE8, 0x02, 0,0,0,0, 1,0,0,0]);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user