From 58100eb80dc20283e3b4de178082ef17f6213551 Mon Sep 17 00:00:00 2001 From: Lizzy Fleckenstein Date: Thu, 22 Dec 2022 23:02:33 +0100 Subject: files --- src/client.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 src/client.rs (limited to 'src/client.rs') diff --git a/src/client.rs b/src/client.rs new file mode 100644 index 0000000..e506a3e --- /dev/null +++ b/src/client.rs @@ -0,0 +1,52 @@ +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, +}; + +pub struct Sender { + sock: Arc, +} + +impl UdpSender for Sender { + fn send(&self, data: Vec) -> io::Result<()> { + self.sock.send(&data)?; + Ok(()) + } +} + +pub struct Receiver { + sock: Arc, +} + +impl UdpReceiver for Receiver { + fn recv(&self) -> io::Result> { + let mut buffer = Vec::new(); + buffer.resize(crate::UDP_PKT_SIZE, 0); + + let len = self.sock.recv(&mut buffer)?; + buffer.truncate(len); + + Ok(buffer) + } +} + +pub fn connect(addr: &str) -> io::Result<(crate::RudpSender, crate::RudpReceiver)> { + let sock = Arc::new(net::UdpSocket::bind("0.0.0.0:0")?); + sock.connect(addr)?; + + Ok(crate::new( + PeerID::Srv as u16, + PeerID::Nil as u16, + Sender { + sock: Arc::clone(&sock), + }, + Receiver { sock }, + )) +} -- cgit v1.2.3