diff options
Diffstat (limited to 'examples')
-rw-r--r-- | examples/example.rs | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/examples/example.rs b/examples/example.rs new file mode 100644 index 0000000..0a6dc42 --- /dev/null +++ b/examples/example.rs @@ -0,0 +1,54 @@ +use byteorder::{BigEndian, WriteBytesExt}; +use mt_rudp::{Client, RudpReceiver, RudpSender}; +use pretty_hex::PrettyHex; +use std::io::{self, Write}; + +async fn example(tx: &RudpSender<Client>, rx: &mut RudpReceiver<Client>) -> io::Result<()> { + // send hello packet + let mut pkt = vec![]; + pkt.write_u16::<BigEndian>(2)?; // high level type + pkt.write_u8(29)?; // serialize ver + pkt.write_u16::<BigEndian>(0)?; // compression modes + pkt.write_u16::<BigEndian>(40)?; // MinProtoVer + pkt.write_u16::<BigEndian>(40)?; // MaxProtoVer + pkt.write_u16::<BigEndian>(3)?; // player name length + pkt.write(b"foo")?; // player name + + tx.send(mt_rudp::Pkt { + unrel: true, + chan: 1, + data: &pkt, + }) + .await?; + + // handle incoming packets + while let Some(result) = rx.recv().await { + match result { + Ok(pkt) => { + println!("{}", pkt.data.hex_dump()); + } + Err(err) => eprintln!("Error: {}", err), + } + } + + Ok(()) +} + +#[tokio::main] +async fn main() -> io::Result<()> { + let (tx, mut rx) = mt_rudp::connect("127.0.0.1:30000").await?; + + tokio::select! { + _ = tokio::signal::ctrl_c() => println!("canceled"), + res = example(&tx, &mut rx) => { + res?; + println!("disconnected"); + } + } + + // close either the receiver or the sender + // this shuts down associated tasks + rx.close().await; + + Ok(()) +} |