1 use byteorder::{BigEndian, WriteBytesExt};
2 use mt_rudp::{Client, RudpReceiver, RudpSender};
3 use pretty_hex::PrettyHex;
4 use std::io::{self, Write};
6 async fn example(tx: &RudpSender<Client>, rx: &mut RudpReceiver<Client>) -> io::Result<()> {
9 pkt.write_u16::<BigEndian>(2)?; // high level type
10 pkt.write_u8(29)?; // serialize ver
11 pkt.write_u16::<BigEndian>(0)?; // compression modes
12 pkt.write_u16::<BigEndian>(40)?; // MinProtoVer
13 pkt.write_u16::<BigEndian>(40)?; // MaxProtoVer
14 pkt.write_u16::<BigEndian>(3)?; // player name length
15 pkt.write_all(b"foo")?; // player name
17 tx.send(mt_rudp::Pkt {
24 // handle incoming packets
25 while let Some(result) = rx.recv().await {
28 println!("{}", pkt.data.hex_dump());
30 Err(err) => eprintln!("Error: {}", err),
38 async fn main() -> io::Result<()> {
39 let (tx, mut rx) = mt_rudp::connect("127.0.0.1:30000").await?;
42 _ = tokio::signal::ctrl_c() => println!("canceled"),
43 res = example(&tx, &mut rx) => {
45 println!("disconnected");
49 // close either the receiver or the sender
50 // this shuts down associated tasks