hydro_test/cluster/
echo_server.rs

1use hydro_lang::*;
2
3pub struct Server {}
4
5pub struct Clients {}
6
7pub fn echo_server<'a>(flow: &FlowBuilder<'a>) -> (Process<'a, Server>, Cluster<'a, Clients>) {
8    // For testing, a fixed cluster of clients.
9    let clients = flow.cluster::<Clients>();
10
11    // Assume single server.
12    let server = flow.process::<Server>();
13
14    // assume 1 echo request is generated from each client
15    let client_requests = clients
16        .source_iter(q!([format!("src: {}", CLUSTER_SELF_ID.raw_id)]))
17        .send_bincode(&server)
18        .clone()
19        .inspect(q!(|(id, t)| println!(
20            "...received request {} from client #{}, echoing back...",
21            t, id.raw_id
22        )));
23    client_requests
24        .send_bincode(&clients)
25        .for_each(q!(|t| println!("received response {}", t)));
26
27    (server, clients)
28}