1use rust_raknet::{RaknetSocket, Reliability};
3use std::{error::Error, time::Duration};
4
5#[tokio::main]
6async fn main() -> Result<(), Box<dyn Error>> {
7 if std::env::var_os("RAKNET_DEBUG").is_some() {
8 rust_raknet::enable_raknet_log(7);
9 }
10 let address = std::env::args()
11 .nth(1)
12 .ok_or("missing peer address")?
13 .parse()?;
14 tokio::time::timeout(Duration::from_secs(60), async {
15 let socket = RaknetSocket::connect_with_version(&address, 11).await?;
16 let mut count = 0;
17 for size in [64, 800, 4096, 10000] {
18 for index in 0..100 {
19 let mut payload: Vec<_> = (0..size).map(|i| (i + index) as u8).collect();
20 payload[0] = 0xfe;
21 socket.send(&payload, Reliability::ReliableOrdered).await?;
22 assert_eq!(
23 socket.recv().await?,
24 payload,
25 "message reordered, duplicated or corrupted"
26 );
27 count += 1;
28 }
29 }
30 socket.close().await?;
31 println!("PASS: {count} unique ordered messages, 64/800/4096/10000 bytes");
32 Ok::<_, Box<dyn Error>>(())
33 })
34 .await?
35}