Struct rust_raknet::RaknetSocket
source · [−]pub struct RaknetSocket { /* private fields */ }
Expand description
Raknet socket wrapper with local and remote.
Implementations
sourceimpl RaknetSocket
impl RaknetSocket
sourcepub async fn from(
addr: &SocketAddr,
s: &Arc<UdpSocket>,
receiver: Receiver<Vec<u8>>,
mtu: u16,
collecter: Arc<Mutex<Sender<SocketAddr>>>,
raknet_version: u8
) -> Self
pub async fn from(
addr: &SocketAddr,
s: &Arc<UdpSocket>,
receiver: Receiver<Vec<u8>>,
mtu: u16,
collecter: Arc<Mutex<Sender<SocketAddr>>>,
raknet_version: u8
) -> Self
Create a Raknet Socket from a UDP socket with an established Raknet connection
This method is used for RaknetListener, users of the library should not care about it.
sourcepub async fn connect(addr: &SocketAddr) -> Result<Self, RaknetError>
pub async fn connect(addr: &SocketAddr) -> Result<Self, RaknetError>
Connect to a Raknet server and return a Raknet socket
Example
let socket = RaknetSocket::connect("127.0.0.1:19132".parse().unwrap()).await.unwrap();
socket.send(&[0xfe], Reliability::ReliableOrdered).await.unwrap();
let buf = socket.recv().await.unwrap();
if buf[0] == 0xfe{
//do something
}
pub async fn connect_with_version(
addr: &SocketAddr,
raknet_version: u8
) -> Result<Self, RaknetError>
sourcepub async fn close(&self) -> Result<(), RaknetError>
pub async fn close(&self) -> Result<(), RaknetError>
Close Raknet Socket. Normally you don’t need to call this method, the RaknetSocket will be closed automatically when it is released. This method can be called repeatedly.
Example
let (latency, motd) = socket::RaknetSocket::ping("127.0.0.1:19132".parse().unwrap()).await.unwrap();
assert!((0..10).contains(&latency));
sourcepub async fn ping(addr: &SocketAddr) -> Result<(i64, String), RaknetError>
pub async fn ping(addr: &SocketAddr) -> Result<(i64, String), RaknetError>
Unconnected ping a Raknet Server and return latency and motd.
Example
let (latency, motd) = socket::RaknetSocket::ping("127.0.0.1:19132".parse().unwrap()).await.unwrap();
assert!((0..10).contains(&latency));
sourcepub async fn send(&self, buf: &[u8], r: Reliability) -> Result<(), RaknetError>
pub async fn send(&self, buf: &[u8], r: Reliability) -> Result<(), RaknetError>
Send a packet
packet must be 0xfe
as the first byte, using other values of bytes may cause unexpected errors.
Except Reliability::ReliableOrdered, all other reliability packets must be less than MTU - 60 (default 1340 bytes), otherwise RaknetError::PacketSizeExceedMTU will be returned
Example
let socket = RaknetSocket::connect("127.0.0.1:19132".parse().unwrap()).await.unwrap();
socket.send(&[0xfe], Reliability::ReliableOrdered).await.unwrap();
sourcepub async fn flush(&self) -> Result<(), RaknetError>
pub async fn flush(&self) -> Result<(), RaknetError>
Wait all packet acked
Example
let socket = RaknetSocket::connect("127.0.0.1:19132".parse().unwrap()).await.unwrap();
socket.send(&[0xfe], Reliability::ReliableOrdered).await.unwrap();
socket.flush().await.unwrap();
sourcepub async fn recv(&self) -> Result<Vec<u8>, RaknetError>
pub async fn recv(&self) -> Result<Vec<u8>, RaknetError>
Recv a packet
Example
let socket = RaknetSocket::connect("127.0.0.1:19132".parse().unwrap()).await.unwrap();
let buf = socket.recv().await.unwrap();
if buf[0] == 0xfe{
//do something
}
sourcepub fn peer_addr(&self) -> Result<SocketAddr, RaknetError>
pub fn peer_addr(&self) -> Result<SocketAddr, RaknetError>
Returns the socket address of the remote peer of this Raknet connection.
Example
let socket = RaknetSocket::connect("127.0.0.1:19132".parse().unwrap()).await.unwrap();
assert_eq!(socket.peer_addr().unwrap(), SocketAddr::V4(SocketAddrV4::new(Ipv4Addr::new(127, 0, 0, 1), 19132)));
sourcepub fn local_addr(&self) -> Result<SocketAddr, RaknetError>
pub fn local_addr(&self) -> Result<SocketAddr, RaknetError>
Returns the socket address of the local half of this Raknet connection.
Example
let mut socket = RaknetSocket::connect("127.0.0.1:19132".parse().unwrap()).await.unwrap();
assert_eq!(socket.local_addr().unwrap().ip(), IpAddr::V4(Ipv4Addr::new(127, 0, 0, 1)));
sourcepub fn raknet_version(&self) -> Result<u8, RaknetError>
pub fn raknet_version(&self) -> Result<u8, RaknetError>
return the raknet version used by this connection.
sourcepub fn set_loss_rate(&mut self, stage: u8)
pub fn set_loss_rate(&mut self, stage: u8)
Set the packet loss rate and use it for testing
The stage
parameter ranges from 0 to 10, indicating a packet loss rate of 0% to 100%.
Example
let mut socket = RaknetSocket::connect("127.0.0.1:19132".parse().unwrap()).await.unwrap();
// set 20% loss packet rate.
socket.set_loss_rate(8);