diff --git a/src/login/character.rs b/src/login/character.rs index 54b981e..e564d45 100644 --- a/src/login/character.rs +++ b/src/login/character.rs @@ -89,8 +89,18 @@ impl CharacterServerState { } } - fn get_settings(&mut self) -> Box { - pktvec![] + fn get_settings(&mut self) -> Vec { + let user = self.user.as_ref().unwrap(); + let settings = match self.shared_state.data_access.get_user_settings_by_user(&user) { + Some(settings) => settings, + None => self.shared_state.data_access.create_user_settings_by_user(&user), + }; + + let pkt = SendKeyAndTeamSettings::new(settings.settings.key_config, + settings.settings.joystick_config, 0, 0); + let pkt = SendCharacterPacket::SendKeyAndTeamSettings(pkt); + + vec![pkt] } } @@ -134,3 +144,53 @@ pub fn new_client(socket: mio::tcp::TcpStream, shared_ let client = Client::new(socket, Box::new(state)); client.io_loop(); } + + +#[cfg(test)] +mod test { + use super::*; + use crate::models::{EUserSettings, UserSettings}; + use libpso::character::settings; + use std::time::SystemTime; + + #[test] + fn test_login() { + } + + #[test] + fn test_option_send() { + struct TestData { + } + + impl DataAccess for TestData { + fn get_user_settings_by_user(&self, _user: &UserAccount) -> Option { + Some(UserSettings { + id: 0, + user_id: 0, + settings: EUserSettings(settings::UserSettings::default()) + }) + } + } + + let shared = SharedLoginState::new(TestData {}); + let mut server = CharacterServerState::new(shared); + server.user = Some(UserAccount { + id: 1, + username: "testuser".to_owned(), + password: bcrypt::hash("mypassword", 5).unwrap(), + guildcard: None, + team_id: None, + banned: false, + muted_until: SystemTime::now(), + created_at: SystemTime::now(), + }); + + let send = server.handle(&RecvCharacterPacket::RequestSettings(RequestSettings {flag: 0})).collect::>(); + assert!(send.len() == 1); + + let bytes = send[0].as_bytes(); + assert!(bytes[2] == 0xE2); + assert!(bytes.len() == 0xAFC); + } + +}