blob: 9f1526ca0b73d14ffde53407872cc55fa9d7c4fd [file] [log] [blame] [edit]
//! Test comms client, but in Rust
use binder::{StatusCode, Strong};
use com_android_minidroid_testservice::aidl::com::android::minidroid::testservice::ITestService::ITestService;
use com_android_minidroid_testservice::binder;
use log::{error, info};
use rpcbinder::RpcSession;
fn get_service(cid: u32, port: u32) -> Result<Strong<dyn ITestService>, StatusCode> {
RpcSession::new().setup_vsock_client(cid, port)
}
fn main() -> Result<(), Box<dyn std::error::Error + Send + Sync>> {
let _ = logger::init(
logger::Config::default()
.with_tag_on_device("client_minidroid_rust")
.with_min_level(log::Level::Debug),
);
// Redirect panic messages to logcat.
std::panic::set_hook(Box::new(|panic_info| {
error!("{}", panic_info);
}));
if std::env::args().len() != 3 {
return Err(format!("usage: {} CID port", std::env::args().next().unwrap()).into());
}
let service_host_cid =
std::env::args().nth(1).and_then(|arg| arg.parse::<u32>().ok()).expect("invalid CID");
let service_port =
std::env::args().nth(2).and_then(|arg| arg.parse::<u32>().ok()).expect("invalid port");
info!(
"Hello Rust Minidroid client! Connecting to CID {} and port {}",
service_host_cid, service_port
);
let service = get_service(service_host_cid, service_port)?;
service.sayHello()?;
service.printText("Hello from Rust client! 🦀")?;
let result = service.addInteger(4, 6)?;
info!("Finished client. 4 + 6 = {}", result);
Ok(())
}