diff options
Diffstat (limited to 'src/transport/udp.rs')
| -rw-r--r-- | src/transport/udp.rs | 26 |
1 files changed, 11 insertions, 15 deletions
diff --git a/src/transport/udp.rs b/src/transport/udp.rs index acb36f2..9b312cf 100644 --- a/src/transport/udp.rs +++ b/src/transport/udp.rs @@ -10,11 +10,11 @@ use crate::context::Context; use crate::transport::Result; use crate::transport::connection::Connection; use crate::transport::listener::Listener; -use crate::transport::receiver::PacketReceiver; -use crate::transport::sender::PacketSender; +use crate::transport::receiver::PacketReceiverBuf; +use crate::transport::sender::PacketSenderBuf; use crate::transport::{Transport, TransportError}; -// TODO : check Udp Transport +const UDP_BUF_SIZE: usize = 1500; #[derive(Clone)] pub struct UdpPeerSender { @@ -22,11 +22,9 @@ pub struct UdpPeerSender { peer: SocketAddr, } -impl<Data> PacketSender<Data> for UdpPeerSender { - fn send<P: crate::codec::Codec<Data>>(&self, packet: P, ctx: &Context<Data>) -> Result<()> { - let mut buf = Vec::new(); - packet.encode(&mut buf, ctx)?; - self.sock.send_to(&buf, self.peer)?; +impl<Data> PacketSenderBuf<Data> for UdpPeerSender { + fn send_buf(&self, buf: &[u8]) -> Result<()> { + self.sock.send_to(buf, self.peer)?; Ok(()) } } @@ -57,11 +55,11 @@ impl<Uid> UdpReceiver<Uid> { } } -impl<Data, Uid> PacketReceiver<Data, Uid> for UdpReceiver<Uid> +impl<Data, Uid> PacketReceiverBuf<Data, Uid> for UdpReceiver<Uid> where Uid: PartialEq + Clone + Send + Sync, { - fn recv<P: crate::codec::Codec<Data>>(&self, ctx: &Context<Data>) -> Result<(Uid, P)> { + fn recv_buf(&self, _ctx: &Context<Data>) -> Result<(Uid, Vec<u8>)> { let bytes = match &self.inner { UdpReceiverInner::Channel(rx) => rx .lock() @@ -69,15 +67,13 @@ where .recv() .map_err(|_| TransportError::ChannelClosed)?, UdpReceiverInner::Socket(sock) => { - let mut buf = vec![0u8; 65535]; + let mut buf = vec![0u8; UDP_BUF_SIZE]; let (n, _) = sock.recv_from(&mut buf)?; buf.truncate(n); buf } }; - let mut reader = bytes.as_slice(); - let packet = P::decode(&mut reader, ctx)?; - Ok((self.uid.clone(), packet)) + Ok((self.uid.clone(), bytes)) } } @@ -100,7 +96,7 @@ where fn accept(&mut self) -> Result<Connection<Uid, Data, UdpPeerSender, UdpReceiver<Uid>>> { loop { - let mut buf = vec![0u8; 65535]; + let mut buf = vec![0u8; UDP_BUF_SIZE]; let (n, src) = self.sock.recv_from(&mut buf)?; buf.truncate(n); |
