diff options
author | metamuffin <metamuffin@disroot.org> | 2024-07-15 15:00:27 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2024-07-15 15:00:27 +0200 |
commit | 340aa47c4652fe2f0ec5b0e4f293cfff407a0e6c (patch) | |
tree | 1d0aad02c54a223b092eb74d065dfbc68cba56f6 /light-client/src | |
parent | d3101bbfd9adf84ef8f0061383272eeaecf224d3 (diff) | |
download | hurrycurry-340aa47c4652fe2f0ec5b0e4f293cfff407a0e6c.tar hurrycurry-340aa47c4652fe2f0ec5b0e4f293cfff407a0e6c.tar.bz2 hurrycurry-340aa47c4652fe2f0ec5b0e4f293cfff407a0e6c.tar.zst |
add texture import/export system for light client
Diffstat (limited to 'light-client/src')
-rw-r--r-- | light-client/src/game.rs | 4 | ||||
-rw-r--r-- | light-client/src/main.rs | 4 | ||||
-rw-r--r-- | light-client/src/network.rs | 51 |
3 files changed, 56 insertions, 3 deletions
diff --git a/light-client/src/game.rs b/light-client/src/game.rs new file mode 100644 index 00000000..fd045f53 --- /dev/null +++ b/light-client/src/game.rs @@ -0,0 +1,4 @@ + +pub struct Game { + +} diff --git a/light-client/src/main.rs b/light-client/src/main.rs index 03c2fd76..85254ef4 100644 --- a/light-client/src/main.rs +++ b/light-client/src/main.rs @@ -1,3 +1,4 @@ +use network::Network; /* Hurry Curry! - a game about cooking Copyright 2024 metamuffin @@ -24,8 +25,11 @@ use sdl2::{ }; pub mod network; +pub mod game; fn main() { + let net = Network::connect("ws://127.0.0.1:27032/"); + let sdl_context = sdl2::init().unwrap(); let video_subsystem = sdl_context.video().unwrap(); let _image_context = sdl2::image::init(InitFlag::WEBP).unwrap(); diff --git a/light-client/src/network.rs b/light-client/src/network.rs index 2a185b73..dc6e894f 100644 --- a/light-client/src/network.rs +++ b/light-client/src/network.rs @@ -1,7 +1,52 @@ -pub struct Network {} +use hurrycurry_protocol::{PacketC, PacketS, BINCODE_CONFIG}; +use log::warn; +use std::{collections::VecDeque, net::TcpStream}; +use tungstenite::{stream::MaybeTlsStream, Message, WebSocket}; + +pub struct Network { + sock: WebSocket<MaybeTlsStream<TcpStream>>, + queue_in: VecDeque<PacketC>, + queue_out: VecDeque<PacketS>, +} impl Network { - pub fn connect(addr: &str) { - let (sock, resp) = tungstenite::connect(addr).unwrap(); + pub fn connect(addr: &str) -> Self { + let (sock, _resp) = tungstenite::connect(addr).unwrap(); + Self { + sock, + queue_in: VecDeque::new(), + queue_out: VecDeque::new(), + } + } + pub fn poll(&mut self) { + self.queue_in.extend(match self.sock.read() { + Ok(Message::Text(packet)) => match serde_json::from_str(&packet) { + Ok(p) => Some(p), + Err(e) => { + warn!("invalid json packet: {e:?}"); + None + } + }, + Ok(Message::Binary(packet)) => { + match bincode::decode_from_slice(&packet, BINCODE_CONFIG) { + Ok((p, _)) => Some(p), + Err(e) => { + warn!("invalid bincode packet: {e:?}"); + None + } + } + } + Ok(_) => None, + Err(e) => { + warn!("{e:?}"); + None + } + }); + + for packet in self.queue_out.drain(..) { + self.sock + .write(Message::Text(serde_json::to_string(&packet).unwrap())) + .unwrap(); + } } } |