From 401d499d612a1cded3e1b420cb1e2c8649405fe9 Mon Sep 17 00:00:00 2001 From: cosminperram Date: Thu, 20 Oct 2022 00:14:57 +0300 Subject: [PATCH] The ship support --- examples/the_ship.rs | 10 ++++++++++ src/games/the_ship.rs | 4 ++-- src/protocols/valve.rs | 14 +++++++------- 3 files changed, 19 insertions(+), 9 deletions(-) create mode 100644 examples/the_ship.rs diff --git a/examples/the_ship.rs b/examples/the_ship.rs new file mode 100644 index 0000000..496fc6f --- /dev/null +++ b/examples/the_ship.rs @@ -0,0 +1,10 @@ + +use gamedig::TheShip; + +fn main() { + let response = TheShip::query("46.4.48.226", Some(27017)); + match response { + Err(error) => println!("Couldn't query, error: {error}"), + Ok(r) => println!("{:?}", r) + } +} diff --git a/src/games/the_ship.rs b/src/games/the_ship.rs index 6a159a5..ae86d92 100644 --- a/src/games/the_ship.rs +++ b/src/games/the_ship.rs @@ -9,8 +9,8 @@ impl TheShip { None => 27015, Some(port) => port }, GatheringSettings { - players: false, - rules: false + players: true, + rules: true }) } } diff --git a/src/protocols/valve.rs b/src/protocols/valve.rs index 3870276..ef027a2 100644 --- a/src/protocols/valve.rs +++ b/src/protocols/valve.rs @@ -152,7 +152,7 @@ impl ValveProtocol { Ok(final_packet) } - pub fn get_request_data(&self, kind: Request) -> Result, GDError> { + pub fn get_request_data(&self, app: &App, kind: Request) -> Result, GDError> { let info_initial_packet = vec![0xFF, 0xFF, 0xFF, 0xFF, 0x54, 0x53, 0x6F, 0x75, 0x72, 0x63, 0x65, 0x20, 0x45, 0x6E, 0x67, 0x69, 0x6E, 0x65, 0x20, 0x51, 0x75, 0x65, 0x72, 0x79, 0x00]; let players_initial_packet = vec![0xFF, 0xFF, 0xFF, 0xFF, 0x55, 0xFF, 0xFF, 0xFF, 0xFF]; let rules_initial_packet = vec![0xFF, 0xFF, 0xFF, 0xFF, 0x56, 0xFF, 0xFF, 0xFF, 0xFF]; @@ -184,7 +184,7 @@ impl ValveProtocol { self.send(&challenge_packet)?; let mut packet = self.receive(DEFAULT_PACKET_SIZE)?; - if packet[0] == 0xFE || (packet[0] == 0xFF && packet[4] == 0x45) { //'E' + if (packet[0] == 0xFE || (packet[0] == 0xFF && packet[4] == 0x45)) && (*app != App::TheShip) { //'E' self.receive_truncated(&packet) } else { Ok(packet.drain(5..).collect::>()) @@ -192,7 +192,7 @@ impl ValveProtocol { } fn get_server_info(&self, app: &App) -> Result { - let buf = self.get_request_data(Request::INFO)?; + let buf = self.get_request_data(app, Request::INFO)?; let mut pos = 0; Ok(ServerInfo { @@ -259,7 +259,7 @@ impl ValveProtocol { } fn get_server_players(&self, app: &App) -> Result { - let buf = self.get_request_data(Request::PLAYERS)?; + let buf = self.get_request_data(app, Request::PLAYERS)?; let mut pos = 0; let count = buffer::get_u8(&buf, &mut pos)?; @@ -288,8 +288,8 @@ impl ValveProtocol { }) } - fn get_server_rules(&self) -> Result { - let buf = self.get_request_data(Request::RULES)?; + fn get_server_rules(&self, app: &App) -> Result { + let buf = self.get_request_data(app, Request::RULES)?; let mut pos = 0; let count = buffer::get_u16_le(&buf, &mut pos)?; @@ -321,7 +321,7 @@ impl ValveProtocol { }, rules: match gather.rules { false => None, - true => Some(client.get_server_rules()?) + true => Some(client.get_server_rules(&app)?) } }) }