Skip to main content

interop/
interop.rs

1//! Independent-peer validation driver; run only inside an isolated network.
2use 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}