diff options
author | metamuffin <metamuffin@disroot.org> | 2024-08-16 13:09:11 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-08-16 13:09:11 +0200 |
commit | 18e7880e580d3727ad03606a7c2a1e789a9a532b (patch) | |
tree | 9f191d67e4e9e76947393b68c5f09811915623f4 | |
parent | ef3bb78900d3f552b8089b5a82c3a963763a61e9 (diff) | |
download | hurrycurry-18e7880e580d3727ad03606a7c2a1e789a9a532b.tar hurrycurry-18e7880e580d3727ad03606a7c2a1e789a9a532b.tar.bz2 hurrycurry-18e7880e580d3727ad03606a7c2a1e789a9a532b.tar.zst |
better error handling
-rw-r--r-- | pixel-client/src/game.rs | 5 | ||||
-rw-r--r-- | pixel-client/src/main.rs | 26 | ||||
-rw-r--r-- | pixel-client/src/render/font.rs | 2 | ||||
-rw-r--r-- | server/client-lib/src/network/sync.rs | 19 |
4 files changed, 30 insertions, 22 deletions
diff --git a/pixel-client/src/game.rs b/pixel-client/src/game.rs index 59b30ad0..1f74d491 100644 --- a/pixel-client/src/game.rs +++ b/pixel-client/src/game.rs @@ -116,7 +116,10 @@ impl Game { keyboard: &KeyboardState, layout: &AtlasLayout, ) -> Option<Box<State>> { - self.network.poll().unwrap(); + if let Err(e) = self.network.poll() { + eprintln!("network error: {e}"); + return Some(Box::new(State::Quit)); + } // TODO perf for packet in self.network.queue_in.drain(..).collect::<Vec<_>>() { diff --git a/pixel-client/src/main.rs b/pixel-client/src/main.rs index a073d0ed..eee426b1 100644 --- a/pixel-client/src/main.rs +++ b/pixel-client/src/main.rs @@ -16,7 +16,7 @@ */ #![feature(map_many_mut, path_add_extension)] -use anyhow::Result; +use anyhow::{anyhow, Result}; use clap::{Parser, Subcommand}; use config::Config; use game::Game; @@ -67,26 +67,26 @@ fn main() -> Result<()> { rustls::crypto::ring::default_provider() .install_default() - .unwrap(); + .expect("failed to initialize crypto things"); - let sdl_context = sdl2::init().unwrap(); + let sdl_context = sdl2::init().map_err(|e| anyhow!("sdl2 init failed: {e}"))?; - let video_subsystem = sdl_context.video().unwrap(); + let video_subsystem = sdl_context + .video() + .map_err(|e| anyhow!("sdl2 video subsystem init failed: {e}"))?; let window = video_subsystem .window("Pixel Curry!", 1280, 720) .position_centered() .resizable() .build() - .map_err(|e| e.to_string()) - .unwrap(); + .map_err(|e| anyhow!("sdl2 window creation failed: {e}"))?; let mut canvas = window .into_canvas() .accelerated() .present_vsync() .build() - .map_err(|e| e.to_string()) - .unwrap(); + .map_err(|e| anyhow!("sdl2 canvas creation failed: {e}"))?; let texture_creator = canvas.texture_creator(); @@ -95,18 +95,22 @@ fn main() -> Result<()> { let mut state = match args.action.unwrap_or_default() { Action::Menu => State::MainMenu(MainMenu::new(renderer.atlas_layout())), Action::Join { server_address } => State::Ingame(Box::new(Game::new( - Network::connect(&server_address).unwrap(), + Network::connect(&server_address)?, &config, renderer.atlas_layout(), ))), }; - let mut events = sdl_context.event_pump().unwrap(); + let mut events = sdl_context + .event_pump() + .map_err(|e| anyhow!("sdl2 event pump: {e}"))?; let mut last_tick = Instant::now(); let mut profiler = ProfilerOverlay::new(); 'mainloop: loop { - let (width, height) = canvas.output_size().unwrap(); + let (width, height) = canvas + .output_size() + .map_err(|_| anyhow!("cannot get canvas size"))?; renderer.size = Vec2::new(width as f32, height as f32); let keyboard = KeyboardState::new(&events); diff --git a/pixel-client/src/render/font.rs b/pixel-client/src/render/font.rs index f1e7f4d3..79e54753 100644 --- a/pixel-client/src/render/font.rs +++ b/pixel-client/src/render/font.rs @@ -36,7 +36,7 @@ impl FontTextures { }) .collect::<Vec<_>>() .try_into() - .unwrap(), + .expect("some letters are missing in the font"), } } } diff --git a/server/client-lib/src/network/sync.rs b/server/client-lib/src/network/sync.rs index 3a475e01..bf2359cb 100644 --- a/server/client-lib/src/network/sync.rs +++ b/server/client-lib/src/network/sync.rs @@ -61,13 +61,13 @@ impl Network { info!("Connecting: host={host:?} port={port}"); let stream = TcpStream::connect((host, port))?; - stream.set_nodelay(true).unwrap(); + stream.set_nodelay(true)?; - let (mut sock, _) = client_tls_with_config(request, stream, None, None).unwrap(); + let (mut sock, _) = client_tls_with_config(request, stream, None, None)?; match sock.get_mut() { - MaybeTlsStream::Plain(s) => s.set_nonblocking(true).unwrap(), - MaybeTlsStream::Rustls(s) => s.sock.set_nonblocking(true).unwrap(), + MaybeTlsStream::Plain(s) => s.set_nonblocking(true)?, + MaybeTlsStream::Rustls(s) => s.sock.set_nonblocking(true)?, _ => todo!(), }; @@ -131,16 +131,17 @@ impl Network { for packet in self.queue_out.drain(..) { debug!("-> {packet:?}"); if self.use_bincode { - self.sock.write(Message::Binary( - bincode::encode_to_vec(&packet, BINCODE_CONFIG).unwrap(), - ))?; + self.sock.write(Message::Binary(bincode::encode_to_vec( + &packet, + BINCODE_CONFIG, + )?))?; } else { self.sock - .write(Message::Text(serde_json::to_string(&packet).unwrap()))?; + .write(Message::Text(serde_json::to_string(&packet)?))?; } } - self.sock.flush().unwrap(); + self.sock.flush()?; Ok(()) } } |