diff --git a/src/main.rs b/src/main.rs index 27962f7..737fba6 100644 --- a/src/main.rs +++ b/src/main.rs @@ -166,11 +166,15 @@ impl Game { } #[derive(StructOpt, Debug)] -#[structopt(name = "basic")] +#[structopt(name = "Stevenarella")] struct Opt { /// Server to connect to #[structopt(short = "s", long = "server")] server: Option, + + /// Log decoded packets received from network + #[structopt(short = "n", long = "network-debug")] + network_debug: bool, } cfg_if! { @@ -273,6 +277,10 @@ pub fn main() { }; game.renderer.camera.pos = cgmath::Point3::new(0.5, 13.2, 0.5); + if opt.network_debug { + unsafe { protocol::NETWORK_DEBUG = true; } + } + if opt.server.is_some() { game.connect_to(&opt.server.unwrap()); } diff --git a/src/protocol/mod.rs b/src/protocol/mod.rs index 6ac2f39..be57ae3 100644 --- a/src/protocol/mod.rs +++ b/src/protocol/mod.rs @@ -42,6 +42,7 @@ pub const SUPPORTED_PROTOCOLS: [i32; 13] = [477, 452, 451, 404, 340, 316, 315, 2 // TODO: switch to using thread_local storage?, see https://doc.rust-lang.org/std/macro.thread_local.html pub static mut CURRENT_PROTOCOL_VERSION: i32 = SUPPORTED_PROTOCOLS[0]; +pub static mut NETWORK_DEBUG: bool = false; /// Helper macro for defining packets #[macro_export] @@ -923,8 +924,19 @@ impl Conn { Direction::Serverbound => Direction::Clientbound, }; + let network_debug = unsafe { NETWORK_DEBUG }; + + if network_debug { + println!("about to parse id={:x}, dir={:?} state={:?}", id, dir, self.state); + std::fs::File::create("last-packet")?.write_all(buf.get_ref())?; + } + let packet = packet::packet_by_id(self.protocol_version, self.state, dir, id, &mut buf)?; + if network_debug { + println!("packet = {:?}", packet); + } + match packet { Some(val) => { let pos = buf.position() as usize;