diff --git a/src/socket_server.rs b/src/socket_server.rs index 9367db8..c1b3745 100644 --- a/src/socket_server.rs +++ b/src/socket_server.rs @@ -1,9 +1,8 @@ use std::{ - net::SocketAddr, - sync::{ + net::SocketAddr, sync::{ atomic::{AtomicBool, Ordering}, Arc, - }, + } }; use async_channel::Sender; @@ -20,6 +19,9 @@ use tokio_tungstenite::{ use crate::coordinator::{ApplicationEvent, MoveEvent}; +const FRAME_WIDTH: u32 = 640; +const FRAME_HEIGHT: u32 = 480; + async fn accept_connection(peer: SocketAddr, stream: TcpStream, mec: Sender) { if let Err(e) = handle_connection(peer, stream, mec.clone()).await { match e { @@ -41,9 +43,17 @@ async fn handle_connection( while let Some(msg) = ws_stream.next().await { let msg = msg?; if msg.is_text() { + let (x_off, y_off) = match process_incoming_string(msg.to_string()) { + Ok(val) => val, + Err(e) => { + error!("{e}"); + (0, 0) + } + }; + if let Err(e) = mec .send(ApplicationEvent::MoveEvent( - process_incoming_string(msg.to_string()), + MoveEvent {x: x_off, y: y_off}, 5, )) .await @@ -57,8 +67,26 @@ async fn handle_connection( Ok(()) } -fn process_incoming_string(message: String) -> MoveEvent { - return MoveEvent { x: 10, y: 30 }; +fn process_incoming_string(message: String) -> core::result::Result<(i32, i32), String> { + let coords: Vec<&str> = message.split(',').collect(); + if coords.len() != 4 { + return Err("Invalid socket input format".to_string()); + } + let x1: u32 = coords[0].parse().map_err(|_| "Invalid x coordinate")?; + let y1: u32 = coords[1].parse().map_err(|_| "Invalid y coordinate")?; + + let coords2: Vec<&str> = coords[2].split(':').collect(); + if coords2.len() != 2 { + return Err("Invalid socket input format".to_string()); + } + + let x2: u32 = coords2[0].parse().map_err(|_| "Invalid width")?; + let y2: u32= coords2[1].parse().map_err(|_| "Invalid height")?; + + let x_adjust = (FRAME_WIDTH - x2) as i32 - x1 as i32; + let y_adjust = (FRAME_HEIGHT - y2) as i32 - y1 as i32; + + return Ok((x_adjust, y_adjust)); } pub async fn start_socketserver(