adding checksum test (#3)
This commit is contained in:
		
							parent
							
								
									dcafba49b5
								
							
						
					
					
						commit
						efb773276b
					
				| @ -31,7 +31,8 @@ pub enum CharacterError { | ||||
| pub enum RecvCharacterPacket { | ||||
|     Login(Login), | ||||
|     RequestSettings(RequestSettings), | ||||
|     CharSelect(CharSelect) | ||||
|     CharSelect(CharSelect), | ||||
|     Checksum(Checksum), | ||||
| } | ||||
| 
 | ||||
| impl RecvServerPacket for RecvCharacterPacket { | ||||
| @ -40,6 +41,7 @@ impl RecvServerPacket for RecvCharacterPacket { | ||||
|             0x93 => Ok(RecvCharacterPacket::Login(Login::from_bytes(data)?)), | ||||
|             0xE0 => Ok(RecvCharacterPacket::RequestSettings(RequestSettings::from_bytes(data)?)), | ||||
|             0xE3 => Ok(RecvCharacterPacket::CharSelect(CharSelect::from_bytes(data)?)), | ||||
|             0x1E8 => Ok(RecvCharacterPacket::Checksum(Checksum::from_bytes(data)?)), | ||||
|             _ => Err(PacketParseError::WrongPacketForServerType) | ||||
|         } | ||||
|     } | ||||
| @ -52,6 +54,7 @@ pub enum SendCharacterPacket { | ||||
|     LoginWelcome(LoginWelcome), | ||||
|     SendKeyAndTeamSettings(SendKeyAndTeamSettings), | ||||
|     CharAck(CharAck), | ||||
|     ChecksumAck(ChecksumAck), | ||||
| } | ||||
| 
 | ||||
| impl SendServerPacket for SendCharacterPacket { | ||||
| @ -61,6 +64,7 @@ impl SendServerPacket for SendCharacterPacket { | ||||
|             SendCharacterPacket::LoginWelcome(pkt) => pkt.as_bytes(), | ||||
|             SendCharacterPacket::SendKeyAndTeamSettings(pkt) => pkt.as_bytes(), | ||||
|             SendCharacterPacket::CharAck(pkt) => pkt.as_bytes(), | ||||
|             SendCharacterPacket::ChecksumAck(pkt) => pkt.as_bytes(), | ||||
|             //SendLoginPacket::RedirectClient(pkt) => pkt.as_bytes(),
 | ||||
|         } | ||||
|     } | ||||
| @ -115,6 +119,13 @@ impl<DA: DataAccess> CharacterServerState<DA> { | ||||
|             code: 2, | ||||
|         })] | ||||
|     } | ||||
| 
 | ||||
|     fn validate_checksum(&mut self) -> Vec<SendCharacterPacket> { | ||||
|         vec![SendCharacterPacket::ChecksumAck(ChecksumAck { | ||||
|             flag: 0, | ||||
|             ack: 1, | ||||
|         })] | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| impl<DA: DataAccess> ServerState for CharacterServerState<DA> { | ||||
| @ -147,6 +158,9 @@ impl<DA: DataAccess> ServerState for CharacterServerState<DA> { | ||||
|             RecvCharacterPacket::CharSelect(sel) => { | ||||
|                 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.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