Skip to main content

ConnectionOptions

Struct ConnectionOptions 

Source
pub struct ConnectionOptions {
    pub certificate: String,
    pub conn_timeout_ms: u32,
    pub io_timeout_ms: u32,
    pub reconnect: bool,
    pub reconnect_min: Duration,
    pub reconnect_max: Duration,
    pub token_refresh_interval: Duration,
    pub max_reconnect_attempts: Option<u32>,
}
Expand description

Options used to configure the connection settings.

Fields§

§certificate: String

Path to the TLS certificate used for secure communication.

§conn_timeout_ms: u32

Connection timeout in milliseconds.

§io_timeout_ms: u32

I/O timeout in milliseconds.

§reconnect: bool

Whether NNG should auto-redial the transport on drop. When true (default), NNG_OPT_RECONNMINT / NNG_OPT_RECONNMAXT are set on the dialer and the driver’s session-restore logic kicks in on the next pipe ADD event. When false, dropped transports stay Disconnected and the user must call connect again explicitly.

§reconnect_min: Duration

Min backoff for NNG’s dialer redial (NNG_OPT_RECONNMINT). Ignored when reconnect == false.

§reconnect_max: Duration

Max backoff ceiling for NNG’s dialer redial (NNG_OPT_RECONNMAXT). Ignored when reconnect == false.

§token_refresh_interval: Duration

How often to refresh the session token on a live connection. Each refresh is a GetSessionToken RPC; the fresh token is stashed in the driver for restore_session to use after a drop. Default 30 s matches motorcortex-python. Set to Duration::ZERO to disable.

§max_reconnect_attempts: Option<u32>

Safety net for the automatic reconnect path. When Some(n), the driver counts consecutive ADD_POST → RestoreSession(token) → non-Ok cycles and, on the n-th failure, disables NNG’s dialer redial and publishes ConnectionState::Disconnected. A successful restore (or a reconnect that skipped restore because no token was cached) resets the counter. None (default) means the driver keeps trying indefinitely, matching NNG’s built-in behaviour.

Implementations§

Source§

impl ConnectionOptions

Source

pub fn new( certificate: String, conn_timeout_ms: u32, io_timeout_ms: u32, ) -> Self

Creates a new ConnectionOptions instance with reconnect / token-refresh defaults. Use the with_* setters to override the reconnect knobs.

§Arguments:
  • certificate - Path to the TLS certificate.
  • conn_timeout_ms - Timeout value for connection establishment, in milliseconds.
  • io_timeout_ms - Timeout value for I/O operations, in milliseconds.
Examples found in repository?
examples/blocking_request.rs (line 26)
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}
More examples
Hide additional examples
examples/async_request.rs (line 26)
15async fn 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).await?;
28    req.login(&user, &pass).await?;
29    req.request_parameter_tree().await?;
30
31    let value: f64 = req.get_parameter(&path).await?;
32    println!("{path} = {value}");
33
34    req.disconnect().await?;
35    Ok(())
36}
examples/subscribe_latest.rs (line 30)
19async fn main() -> Result<()> {
20    let mut args = env::args().skip(1);
21    let url = args.next().unwrap_or_else(|| "wss://127.0.0.1:5568:5567".into());
22    let cert = args.next().unwrap_or_else(|| "tests/mcx.cert.crt".into());
23    let user = args.next().unwrap_or_else(|| "root".into());
24    let pass = args.next().unwrap_or_default();
25    let path = args
26        .next()
27        .unwrap_or_else(|| "root/Control/dummyDouble".into());
28
29    let (req_url, sub_url) = parse_url(&url)?;
30    let opts = ConnectionOptions::new(cert, 5_000, 5_000);
31    let req = Request::connect_to(&req_url, opts.clone()).await?;
32    req.login(&user, &pass).await?;
33    req.request_parameter_tree().await?;
34    let sub = Subscribe::connect_to(&sub_url, opts).await?;
35    let subscription = sub.subscribe(&req, [&path[..]], "example-latest", 100).await?;
36
37    // Sample the latest value every second for 5 seconds.
38    for _ in 0..5 {
39        let (_ts, value): (_, f64) = subscription.latest().await?;
40        println!("{path} = {value}");
41        tokio::time::sleep(Duration::from_secs(1)).await;
42    }
43
44    sub.unsubscribe(&req, subscription).await?;
45    sub.disconnect().await?;
46    req.disconnect().await?;
47    Ok(())
48}
examples/subscribe_stream.rs (line 29)
18async fn main() -> Result<()> {
19    let mut args = env::args().skip(1);
20    let url = args.next().unwrap_or_else(|| "wss://127.0.0.1:5568:5567".into());
21    let cert = args.next().unwrap_or_else(|| "tests/mcx.cert.crt".into());
22    let user = args.next().unwrap_or_else(|| "root".into());
23    let pass = args.next().unwrap_or_default();
24    let path = args
25        .next()
26        .unwrap_or_else(|| "root/Control/dummyDouble".into());
27
28    let (req_url, sub_url) = parse_url(&url)?;
29    let opts = ConnectionOptions::new(cert, 5_000, 5_000);
30    let req = Request::connect_to(&req_url, opts.clone()).await?;
31    req.login(&user, &pass).await?;
32    req.request_parameter_tree().await?;
33    let sub = Subscribe::connect_to(&sub_url, opts).await?;
34    let subscription = sub.subscribe(&req, [&path[..]], "example-stream", 10).await?;
35
36    // Read 20 samples from the ring. Ring size 256 means we tolerate
37    // a ~256-sample consumer stall before seeing Missed.
38    let mut stream = Box::pin(subscription.stream::<f64>(256));
39    let deadline = tokio::time::Instant::now() + Duration::from_secs(5);
40    let mut seen = 0;
41    while seen < 20 {
42        match tokio::time::timeout_at(deadline, stream.next()).await {
43            Ok(Some(Ok((_ts, v)))) => {
44                println!("{path} = {v}");
45                seen += 1;
46            }
47            Ok(Some(Err(Missed(n)))) => eprintln!("lagged, dropped {n} samples"),
48            Ok(None) | Err(_) => break,
49        }
50    }
51
52    sub.unsubscribe(&req, subscription).await?;
53    sub.disconnect().await?;
54    req.disconnect().await?;
55    Ok(())
56}
Source

pub fn with_reconnect(self, enabled: bool) -> Self

Disable NNG auto-redial + driver session-restore logic.

Source

pub fn with_reconnect_backoff(self, min: Duration, max: Duration) -> Self

Override NNG’s dialer backoff window.

Source

pub fn with_token_refresh_interval(self, interval: Duration) -> Self

Override the session-token refresh cadence. Duration::ZERO disables the background refresh entirely.

Source

pub fn with_max_reconnect_attempts(self, attempts: Option<u32>) -> Self

Cap the number of consecutive RestoreSession failures the driver tolerates before it disables NNG’s dialer and publishes ConnectionState::Disconnected. Pass None to keep the default “retry forever” behaviour.

Trait Implementations§

Source§

impl Clone for ConnectionOptions

Source§

fn clone(&self) -> ConnectionOptions

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.