From a2a492dd74e0bf0614e605fa57c4403600749f81 Mon Sep 17 00:00:00 2001 From: Robert Schauklies Date: Sun, 2 Feb 2025 16:09:29 +0100 Subject: [PATCH] rewrite to tokio, includes mpsc better structuring --- beamer/client/src/main.rs | 29 ++++++++++++++++++++++++----- beamer/client/src/receiver.rs | 27 +++++++++++++++++++++++++++ beamer/client/src/renderer.rs | 7 +++++++ 3 files changed, 58 insertions(+), 5 deletions(-) create mode 100644 beamer/client/src/receiver.rs create mode 100644 beamer/client/src/renderer.rs diff --git a/beamer/client/src/main.rs b/beamer/client/src/main.rs index 222b034..573de61 100644 --- a/beamer/client/src/main.rs +++ b/beamer/client/src/main.rs @@ -1,10 +1,18 @@ -use semserialize::SemLine; + use serde::{Serialize, Deserialize}; use postcard::{from_bytes}; - use argh::FromArgs; -use std::net; +use tokio::sync::mpsc; +use std::error::Error; +use std::{env, io}; +use tokio::net::UdpSocket; +use tokio::sync::mpsc::channel; +use crate::receiver::Receiver; + +mod renderer; +mod receiver; + #[derive(FromArgs)] ///Config options for the client struct Config { @@ -15,10 +23,21 @@ ip: String, #[argh(option, default = "2137",short='p')] udpport: usize, } -fn main() { + + + +#[tokio::main] +async fn main() -> Result<(), Box>{ let config:Config = argh::from_env(); println!("UDP listener Port is {}",config.udpport); let socket_addr:std::net::SocketAddr = format!("{}:{}",config.ip,config.udpport).parse::().unwrap_or("0.0.0.0:2137".parse::().unwrap()); - let udpsocket = std::net::UdpSocket::bind(socket_addr).expect("couldn't bind to address"); + let udp_socket = UdpSocket::bind(socket_addr).await.expect("couldn't bind to address"); + let (sender,rcv) = channel(5); + + let receiver = Receiver{socket:udp_socket,sender}; + receiver.run().await?; + + Ok(()) + } diff --git a/beamer/client/src/receiver.rs b/beamer/client/src/receiver.rs new file mode 100644 index 0000000..54255bb --- /dev/null +++ b/beamer/client/src/receiver.rs @@ -0,0 +1,27 @@ +use tokio::net::UdpSocket; +use tokio::sync::mpsc::channel; +use semserialize::SemLine; +use std::{env, io}; + + +pub struct Receiver { + pub socket: UdpSocket, + pub sender: tokio::sync::mpsc::Sender +} + + +impl Receiver{ + pub async fn run(self) -> Result<(), io::Error>{ + //its fine to allocate on the heap + let mut buf: Vec = vec![0;6535]; + loop{ + let read = self.socket.recv(&mut buf).await.expect("Reading from buffer failed"); + let msg:SemLine = postcard::from_bytes(&buf).expect("failed to decode bytes!"); + + + } + + + return Ok(()) + } +} \ No newline at end of file diff --git a/beamer/client/src/renderer.rs b/beamer/client/src/renderer.rs new file mode 100644 index 0000000..a7a18e5 --- /dev/null +++ b/beamer/client/src/renderer.rs @@ -0,0 +1,7 @@ + +use tokio::sync::mpsc::Receiver; +use semserialize::SemLine; + +struct Drawer{ + channel: Receiver +}