aboutsummaryrefslogtreecommitdiff
path: root/p2p/examples/monitor/src/client.rs
diff options
context:
space:
mode:
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;
+ });
+}