mirror of
https://github.com/OMGeeky/tarpc.git
synced 2025-12-30 16:18:56 +01:00
53 lines
1.6 KiB
Rust
53 lines
1.6 KiB
Rust
// Copyright 2018 Google LLC
|
|
//
|
|
// Use of this source code is governed by an MIT-style
|
|
// license that can be found in the LICENSE file or at
|
|
// https://opensource.org/licenses/MIT.
|
|
|
|
use clap::Clap;
|
|
use service::{init_tracing, WorldClient};
|
|
use std::{net::SocketAddr, time::Duration};
|
|
use tarpc::{client, context, tokio_serde::formats::Json};
|
|
use tokio::time::sleep;
|
|
use tracing::Instrument;
|
|
|
|
#[derive(Clap)]
|
|
struct Flags {
|
|
/// Sets the server address to connect to.
|
|
#[clap(long)]
|
|
server_addr: SocketAddr,
|
|
/// Sets the name to say hello to.
|
|
#[clap(long)]
|
|
name: String,
|
|
}
|
|
|
|
#[tokio::main]
|
|
async fn main() -> anyhow::Result<()> {
|
|
let flags = Flags::parse();
|
|
let _uninstall = init_tracing("Tarpc Example Client")?;
|
|
|
|
let transport = tarpc::serde_transport::tcp::connect(flags.server_addr, Json::default);
|
|
|
|
// WorldClient is generated by the service attribute. It has a constructor `new` that takes a
|
|
// config and any Transport as input.
|
|
let client = WorldClient::new(client::Config::default(), transport.await?).spawn();
|
|
|
|
let hello = async move {
|
|
// Send the request twice, just to be safe! ;)
|
|
tokio::select! {
|
|
hello1 = client.hello(context::current(), format!("{}1", flags.name)) => { hello1 }
|
|
hello2 = client.hello(context::current(), format!("{}2", flags.name)) => { hello2 }
|
|
}
|
|
}
|
|
.instrument(tracing::info_span!("Two Hellos"))
|
|
.await;
|
|
|
|
tracing::info!("{:?}", hello);
|
|
|
|
// Let the background span processor finish.
|
|
sleep(Duration::from_micros(1)).await;
|
|
opentelemetry::global::shutdown_tracer_provider();
|
|
|
|
Ok(())
|
|
}
|