aboutsummaryrefslogtreecommitdiff
path: root/light-client/src
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2024-07-15 15:00:27 +0200
committermetamuffin <metamuffin@disroot.org>2024-07-15 15:00:27 +0200
commit340aa47c4652fe2f0ec5b0e4f293cfff407a0e6c (patch)
tree1d0aad02c54a223b092eb74d065dfbc68cba56f6 /light-client/src
parentd3101bbfd9adf84ef8f0061383272eeaecf224d3 (diff)
downloadhurrycurry-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.rs4
-rw-r--r--light-client/src/main.rs4
-rw-r--r--light-client/src/network.rs51
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();
+ }
}
}