-use crate::{PeerID, UdpReceiver, UdpSender};
-use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
-use num_enum::{TryFromPrimitive, TryFromPrimitiveError};
-use std::{
- cell::Cell,
- fmt,
- io::{self, Write},
- net, ops,
- sync::{mpsc, Arc},
- thread,
-};
+use crate::*;
+use std::{io, net, sync::Arc};
pub struct Sender {
sock: Arc<net::UdpSocket>,
pub mod error;
mod recv_worker;
-use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
+use byteorder::{BigEndian, WriteBytesExt};
pub use client::{connect, Sender as Client};
-use num_enum::{TryFromPrimitive, TryFromPrimitiveError};
+use num_enum::TryFromPrimitive;
use std::{
io::{self, Write},
ops,
pub const REL_BUFFER: usize = 0x8000;
pub const INIT_SEQNUM: u16 = 65500;
-pub type Error = error::Error;
-
pub trait UdpSender: Send + Sync + 'static {
fn send(&self, data: Vec<u8>) -> io::Result<()>;
}
data: T,
}
+pub type Error = error::Error;
pub type InPkt = Result<Pkt<Vec<u8>>, Error>;
#[derive(Debug)]
}
impl<S: UdpSender> RudpShare<S> {
- pub fn new(id: u16, remote_id: u16, udp_tx: S) -> Self {
- Self {
- id,
- remote_id,
- udp_tx,
- chans: (0..NUM_CHANS).map(|_| AckChan).collect(),
- }
- }
-
pub fn send(&self, tp: PktType, pkt: Pkt<&[u8]>) -> io::Result<()> {
let mut buf = Vec::with_capacity(4 + 2 + 1 + 1 + pkt.data.len());
buf.write_u32::<BigEndian>(PROTO_ID)?;
) -> (RudpSender<S>, RudpReceiver<S>) {
let (pkt_tx, pkt_rx) = mpsc::channel();
- let share = Arc::new(RudpShare::new(id, remote_id, udp_tx));
+ let share = Arc::new(RudpShare {
+ id,
+ remote_id,
+ udp_tx,
+ chans: (0..NUM_CHANS).map(|_| AckChan).collect(),
+ });
let recv_share = Arc::clone(&share);
- thread::spawn(move || {
+ thread::spawn(|| {
recv_worker::RecvWorker::new(udp_rx, recv_share, pkt_tx).run();
});
-use crate::{error::Error, CtlType, InPkt, Pkt, PktType, RudpShare, UdpReceiver, UdpSender};
-use byteorder::{BigEndian, ReadBytesExt, WriteBytesExt};
-use num_enum::{TryFromPrimitive, TryFromPrimitiveError};
+use crate::{error::Error, *};
+use byteorder::{BigEndian, ReadBytesExt};
use std::{
cell::Cell,
io, result,
};
fn to_seqnum(seqnum: u16) -> usize {
- (seqnum as usize) & (crate::REL_BUFFER - 1)
+ (seqnum as usize) & (REL_BUFFER - 1)
}
struct RelChan {
}
pub fn run(&self) {
- let mut recv_chans = (0..crate::NUM_CHANS as u8)
+ let mut recv_chans = (0..NUM_CHANS as u8)
.map(|num| RelChan {
num,
- packets: (0..crate::REL_BUFFER).map(|_| Cell::new(None)).collect(),
- seqnum: crate::INIT_SEQNUM,
+ packets: (0..REL_BUFFER).map(|_| Cell::new(None)).collect(),
+ seqnum: INIT_SEQNUM,
})
.collect();
let mut cursor = io::Cursor::new(self.udp_rx.recv()?);
let proto_id = cursor.read_u32::<BigEndian>()?;
- if proto_id != crate::PROTO_ID {
+ if proto_id != PROTO_ID {
do yeet InvalidProtoId(proto_id);
}