Skip to main content

blocking_request/
blocking_request.rs

1//! Same shape as `async_request.rs`, but via the blocking façade —
2//! one `block_on` per RPC, hidden inside each method. No `.await`,
3//! no explicit runtime setup in user code.
4//!
5//! ```bash
6//! cargo run --example blocking_request -- \
7//!     wss://127.0.0.1:5568:5567 path/to/mcx.cert.crt root mypassword root/Control/dummyDouble
8//! ```
9
10use std::env;
11
12use motorcortex_rust::blocking::Request;
13use motorcortex_rust::{ConnectionOptions, Result, parse_url};
14
15fn main() -> Result<()> {
16    let mut args = env::args().skip(1);
17    let url = args.next().unwrap_or_else(|| "wss://127.0.0.1:5568:5567".into());
18    let cert = args.next().unwrap_or_else(|| "tests/mcx.cert.crt".into());
19    let user = args.next().unwrap_or_else(|| "root".into());
20    let pass = args.next().unwrap_or_default();
21    let path = args
22        .next()
23        .unwrap_or_else(|| "root/Control/dummyDouble".into());
24
25    let (req_url, _sub_url) = parse_url(&url)?;
26    let opts = ConnectionOptions::new(cert, 5_000, 5_000);
27    let req = Request::connect_to(&req_url, opts)?;
28    req.login(&user, &pass)?;
29    req.request_parameter_tree()?;
30
31    let value: f64 = req.get_parameter(&path)?;
32    println!("{path} = {value}");
33
34    req.disconnect()?;
35    Ok(())
36}