transmit_multiple_structs/
transmit_multiple_structs.rs1extern crate msg_transmitter;
16#[macro_use]
17extern crate serde_derive;
18extern crate bincode;
19extern crate tokio;
20
21use msg_transmitter::*;
22
23use std::env;
24
25#[derive(Serialize, Deserialize, Debug, Clone)]
26enum Message {
27 VecOfF32msg(VecOfF32),
28 Endmsg(End),
29}
30
31#[derive(Serialize, Deserialize, Debug, Clone)]
32struct VecOfF32 {
33 vec: Vec<u32>,
34}
35
36#[derive(Serialize, Deserialize, Debug, Clone)]
37struct End;
38
39fn main() {
40 let a = env::args().skip(1).collect::<Vec<_>>();
41 match a.first().unwrap().as_str() {
42 "client" => client(),
43 "server" => server(),
44 _ => panic!("failed"),
45 };
46}
47
48fn server() {
49 let server = create_tcp_server("127.0.0.1:6666", "server");
50 let server_task = server.start_server(Message::VecOfF32msg(VecOfF32 { vec: vec![] }), |client_name: String, msg: Message| {
51 println!("{}: {:?}", client_name, msg);
52 match msg {
53 Message::VecOfF32msg(vec_of_32) => {
54 if vec_of_32.vec.len() < 10 {
55 vec![(client_name, Message::VecOfF32msg(vec_of_32))]
56 } else {
57 vec![(client_name, Message::Endmsg(End))]
58 }
59 }
60 Message::Endmsg(_) => {
61 std::process::exit(0)
62 }
63 }
64 });
65 tokio::run(server_task);
66}
67
68fn client() {
69 let client = create_tcp_client("127.0.0.1:6666", "client");
70 let mut x: u32 = 0;
72 let client_task = client.start_client(move |msg: Message| {
73 println!("{:?}", msg);
74 match msg {
75 Message::VecOfF32msg(mut vec_of_32) => {
76 x += 1;
77 vec_of_32.vec.push(1);
78 vec![Message::VecOfF32msg(vec_of_32)]
79 }
80 Message::Endmsg(_) => {
81 println!("Outer count is {:?}", x);
82 std::process::exit(0)
83 }
84 }
85 });
86 tokio::run(client_task);
87}
88