1use crate::config::Config;
2pub mod config;
3pub mod message;
4pub mod network;
5pub mod unit;
6use crate::{
7 message::{message::Message, mtype::Type},
8 network::{client, io::send},
9 unit::*,
10};
11use network::server;
12use std::time::Instant;
13
14pub fn run_server(config: Config, is_limited: Option<usize>) {
15 let port = config.port();
16 let pool_size = 1;
17 let queue_size = 1;
18 server::listen_portable(port, pool_size, queue_size, is_limited);
19}
20
21pub fn run_client(config: Config) {
22 let server_address = config.server();
23 let port = config.port();
24 println!("Connecting to {}:{}...", server_address, port);
25 let mut stream = client::connect(server_address, port).expect("Unable to connect");
26 assert_eq!(stream.peer_addr().unwrap().ip(), server_address);
27
28 let client_address = config.client();
29 let body_size = config.message_size();
30 let mtype = Type::Benchmark;
31 let msg = Message::new(client_address, server_address, body_size, mtype);
32 let mut sent_batches = 0;
33 loop {
34 let now = Instant::now();
35
36 for _counter in 0..config.batch_size() {
37 let size = send(&mut stream, &msg).expect("Unable to send message");
38 assert_eq!(size, body_size);
39 }
40
41 let elapsed = now.elapsed().as_secs_f64();
42 let sent_bytes = (config.message_size() * config.batch_size()) as f64;
43 let sent_bits = (sent_bytes * 8.0) as f64;
44
45 let throughput = sent_bits / elapsed;
46 println!(
47 "Throughput: {}; Sent bytes: {}; Time elapsed: {:.2}s",
48 throughput_to_string(throughput),
49 data_to_string(sent_bytes),
50 elapsed
51 );
52 sent_batches += 1;
53 if sent_batches == config.number_batches() {
54 break;
55 }
56 }
57
58 let msg = Message::new(client_address, server_address, 0, Type::Close);
59 let size = send(&mut stream, &msg).expect("Unable to send message");
60 assert_eq!(size, 0);
61}