aboutsummaryrefslogtreecommitdiff
path: root/p2p/examples/monitor/src/client.rs
diff options
context:
space:
mode:
authorhozan23 <hozan23@karyontech.net>2024-05-27 00:59:23 +0200
committerhozan23 <hozan23@karyontech.net>2024-05-27 00:59:23 +0200
commitd1c816660c0583db33d160e2ef3e980bef0d5a85 (patch)
tree9eb06e6dbfbe34c6c2f85eee8d2e337b155be103 /p2p/examples/monitor/src/client.rs
parent385d53ec53e750e342cce78edb793958edf5133e (diff)
p2p: WIP rpc server implementation for the p2p monitor
Diffstat (limited to 'p2p/examples/monitor/src/client.rs')
-rw-r--r--p2p/examples/monitor/src/client.rs48
1 files changed, 48 insertions, 0 deletions
diff --git a/p2p/examples/monitor/src/client.rs b/p2p/examples/monitor/src/client.rs
new file mode 100644
index 0000000..d4970eb
--- /dev/null
+++ b/p2p/examples/monitor/src/client.rs
@@ -0,0 +1,48 @@
+use clap::Parser;
+
+use karyon_jsonrpc::Client;
+use karyon_p2p::endpoint::Endpoint;
+
+#[derive(Parser)]
+#[command(author, version, about, long_about = None)]
+struct Cli {
+ /// RPC server endpoint.
+ #[arg(short)]
+ rpc_endpoint: Endpoint,
+}
+
+fn main() {
+ smol::block_on(async {
+ env_logger::init();
+ let cli = Cli::parse();
+
+ let rpc = Client::builder(cli.rpc_endpoint)
+ .expect("Create rpc client builder")
+ .build()
+ .await
+ .expect("Create rpc client");
+
+ let (_, sub) = rpc
+ .subscribe("MonitorRPC.conn_subscribe", ())
+ .await
+ .expect("Subscribe to connection events");
+
+ let (_, sub2) = rpc
+ .subscribe("MonitorRPC.peer_pool_subscribe", ())
+ .await
+ .expect("Subscribe to peer pool events");
+
+ smol::spawn(async move {
+ loop {
+ let _event = sub.recv().await.expect("Receive connection event");
+ }
+ })
+ .detach();
+
+ smol::spawn(async move {
+ loop {
+ let _event = sub2.recv().await.expect("Receive peer pool event");
+ }
+ }).await;
+ });
+}