]> git.lizzy.rs Git - mt_rudp.git/commitdiff
finish receiver
authorLizzy Fleckenstein <eliasfleckenstein@web.de>
Thu, 29 Dec 2022 02:44:11 +0000 (03:44 +0100)
committerLizzy Fleckenstein <eliasfleckenstein@web.de>
Thu, 29 Dec 2022 02:44:11 +0000 (03:44 +0100)
src/main.rs
src/recv_worker.rs

index d5fa9526d89e7365dcd7d7abb0267df55ebc6cf7..b6a6af630bfa238b8b461b1502c7a2b3e3014949 100644 (file)
@@ -10,11 +10,12 @@ use byteorder::{BigEndian, WriteBytesExt};
 pub use client::{connect, Sender as Client};
 use num_enum::TryFromPrimitive;
 use std::{
+    collections::HashMap,
     io::{self, Write},
     ops,
     sync::Arc,
 };
-use tokio::sync::{mpsc, RwLock};
+use tokio::sync::{mpsc, Mutex, RwLock};
 
 pub const PROTO_ID: u32 = 0x4f457403;
 pub const UDP_PKT_SIZE: usize = 512;
@@ -69,14 +70,11 @@ pub struct Pkt<T> {
 pub type Error = error::Error;
 pub type InPkt = Result<Pkt<Vec<u8>>, Error>;
 
-#[derive(Debug)]
-pub struct AckChan;
-
 #[derive(Debug)]
 pub struct RudpShare<S: UdpSender> {
     pub id: u16,
     pub remote_id: RwLock<u16>,
-    pub chans: Vec<AckChan>,
+    pub ack_chans: Mutex<HashMap<u16, mpsc::Sender<()>>>,
     udp_tx: S,
 }
 
@@ -156,7 +154,7 @@ pub fn new<S: UdpSender, R: UdpReceiver>(
         id,
         remote_id: RwLock::new(remote_id),
         udp_tx,
-        chans: (0..NUM_CHANS).map(|_| AckChan).collect(),
+        ack_chans: Mutex::new(HashMap::new()),
     });
     let recv_share = Arc::clone(&share);
 
index f83e8efb7dca69ec722723f3f85ef130f94f57de..316bb48e59f19e229d28341b47f551b50e222d0e 100644 (file)
@@ -133,7 +133,10 @@ impl<R: UdpReceiver, S: UdpSender> RecvWorker<R, S> {
 
         match cursor.read_u8()?.try_into()? {
             PktType::Ctl => match cursor.read_u8()?.try_into()? {
-                CtlType::Ack => { /* TODO */ }
+                CtlType::Ack => {
+                    let seqnum = cursor.read_u16::<BigEndian>()?;
+                    self.share.ack_chans.lock().await.remove(&seqnum);
+                }
                 CtlType::SetPeerID => {
                     let mut id = self.share.remote_id.write().await;