]> git.lizzy.rs Git - mt_rudp.git/commitdiff
fix async
authorLizzy Fleckenstein <eliasfleckenstein@web.de>
Wed, 28 Dec 2022 22:30:02 +0000 (23:30 +0100)
committerLizzy Fleckenstein <eliasfleckenstein@web.de>
Wed, 28 Dec 2022 22:30:02 +0000 (23:30 +0100)
Cargo.toml
src/client.rs
src/main.rs
src/recv_worker.rs

index 55cc8ff2d9b5ade81960c5e4deb0655e92484e01..2947badc7617114a12dbbc5c541f2f1e2952993c 100644 (file)
@@ -4,6 +4,7 @@ version = "0.1.0"
 edition = "2021"
 
 [dependencies]
+async-trait = "0.1.60"
 byteorder = "1.4.3"
 num_enum = "0.5.7"
 tokio = { version = "1.23.0", features = ["full"] }
index 97a18d7869be644325269e95da41e6af04964216..d416e53a51e0801c9057b123cca983f3208d4133 100644 (file)
@@ -6,6 +6,7 @@ pub struct Sender {
     sock: Arc<net::UdpSocket>,
 }
 
+#[async_trait]
 impl UdpSender for Sender {
     async fn send(&self, data: Vec<u8>) -> io::Result<()> {
         self.sock.send(&data).await?;
@@ -17,6 +18,7 @@ pub struct Receiver {
     sock: Arc<net::UdpSocket>,
 }
 
+#[async_trait]
 impl UdpReceiver for Receiver {
     async fn recv(&self) -> io::Result<Vec<u8>> {
         let mut buffer = Vec::new();
index 241d324f845067e71bc0bbf1795a1a5189abf5df..a190bcd094447afb6bdd928b1e0c2d3023f12e43 100644 (file)
@@ -1,11 +1,11 @@
 #![feature(yeet_expr)]
 #![feature(cursor_remaining)]
 #![feature(hash_drain_filter)]
-#![feature(async_fn_in_trait)]
 mod client;
 pub mod error;
 mod recv_worker;
 
+use async_trait::async_trait;
 use byteorder::{BigEndian, WriteBytesExt};
 pub use client::{connect, Sender as Client};
 use num_enum::TryFromPrimitive;
@@ -24,10 +24,12 @@ pub const REL_BUFFER: usize = 0x8000;
 pub const INIT_SEQNUM: u16 = 65500;
 pub const TIMEOUT: u64 = 30;
 
+#[async_trait]
 pub trait UdpSender: Send + Sync + 'static {
     async fn send(&self, data: Vec<u8>) -> io::Result<()>;
 }
 
+#[async_trait]
 pub trait UdpReceiver: Send + Sync + 'static {
     async fn recv(&self) -> io::Result<Vec<u8>>;
 }
@@ -118,6 +120,12 @@ impl<S: UdpSender> ops::Deref for RudpReceiver<S> {
     }
 }
 
+impl<S: UdpSender> ops::DerefMut for RudpReceiver<S> {
+    fn deref_mut(&mut self) -> &mut Self::Target {
+        &mut self.pkt_rx
+    }
+}
+
 pub fn new<S: UdpSender, R: UdpReceiver>(
     id: u16,
     remote_id: u16,
@@ -134,7 +142,10 @@ pub fn new<S: UdpSender, R: UdpReceiver>(
     });
     let recv_share = Arc::clone(&share);
 
-    tokio::spawn(async { recv_worker::RecvWorker::new(udp_rx, recv_share, pkt_tx).await });
+    tokio::spawn(async {
+        let worker = recv_worker::RecvWorker::new(udp_rx, recv_share, pkt_tx);
+        worker.run().await;
+    });
 
     (
         RudpSender {
@@ -149,7 +160,7 @@ pub fn new<S: UdpSender, R: UdpReceiver>(
 #[tokio::main]
 async fn main() -> io::Result<()> {
     //println!("{}", x.deep_size_of());
-    let (tx, rx) = connect("127.0.0.1:30000").await?;
+    let (tx, mut rx) = connect("127.0.0.1:30000").await?;
 
     let mut mtpkt = vec![];
     mtpkt.write_u16::<BigEndian>(2)?; // high level type
index 60cadebf9c8eb1d78c645581a28c7a40a4364f14..5a156eb9a6f07883a95adc6ed6919254fde882be 100644 (file)
@@ -34,7 +34,7 @@ pub struct RecvWorker<R: UdpReceiver, S: UdpSender> {
 }
 
 impl<R: UdpReceiver, S: UdpSender> RecvWorker<R, S> {
-    pub async fn new(udp_rx: R, share: Arc<RudpShare<S>>, pkt_tx: mpsc::UnboundedSender<InPkt>) {
+    pub fn new(udp_rx: R, share: Arc<RudpShare<S>>, pkt_tx: mpsc::UnboundedSender<InPkt>) -> Self {
         Self {
             udp_rx,
             share,
@@ -52,8 +52,6 @@ impl<R: UdpReceiver, S: UdpSender> RecvWorker<R, S> {
                     .collect(),
             ),
         }
-        .run()
-        .await
     }
 
     pub async fn run(&self) {