1 use connect::{ConnectDatagram, Connection, SinkExt, StreamExt};
6 const NUM_MESSAGES: Number = 10000;
9 async fn main() -> anyhow::Result<()> {
12 // Get ip address from cmd line args
13 let args: Vec<String> = env::args().collect();
14 let ip_address = match args.get(1) {
17 error!("Need to pass IP address to connect to as command line argument");
22 // create a client connection to the server
23 let conn = Connection::tcp_client(ip_address).await?;
24 let (mut reader, mut writer) = conn.split();
27 let read_task = async_std::task::spawn(async move {
28 let mut prev: Option<Number> = None;
30 while let Some(mut reply) = reader.next().await {
31 let mut payload = reply.take_data().unwrap();
33 let mut data_bytes: [u8; 2] = [0; 2];
34 for i in 0..payload.len() {
35 data_bytes[i] = payload.remove(0);
38 let data = Number::from_be_bytes(data_bytes);
40 if let Some(prev_num) = prev {
41 assert_eq!(prev_num + 1, data);
47 info!("Received message: {}", data);
49 if prev.unwrap() + 1 == NUM_MESSAGES {
55 // send messages to the server
56 for i in 0..NUM_MESSAGES {
57 // info!("Sending message: {}", i);
58 let data = i.to_be_bytes().to_vec();
59 let envelope = ConnectDatagram::new(i, data)?;
60 writer.send(envelope).await?;