rewrite to tokio, includes mpsc
All checks were successful
/ test (push) Successful in 13s

better structuring
This commit is contained in:
Robert Schauklies 2025-02-02 16:09:29 +01:00
parent b33fe3ccaf
commit a2a492dd74
3 changed files with 58 additions and 5 deletions

View file

@ -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<dyn Error>>{
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::<std::net::SocketAddr>().unwrap_or("0.0.0.0:2137".parse::<std::net::SocketAddr>().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(())
}

View file

@ -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<SemLine>
}
impl Receiver{
pub async fn run(self) -> Result<(), io::Error>{
//its fine to allocate on the heap
let mut buf: Vec<u8> = 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(())
}
}

View file

@ -0,0 +1,7 @@
use tokio::sync::mpsc::Receiver;
use semserialize::SemLine;
struct Drawer{
channel: Receiver<SemLine>
}