UnifiedAsyncClient

Struct UnifiedAsyncClient 

Source
pub struct UnifiedAsyncClient { /* private fields */ }
Expand description

Unified async OpenIGTLink client

Supports optional TLS encryption and automatic reconnection without combinatorial type explosion.

§Examples

use openigtlink_rust::io::unified_async_client::UnifiedAsyncClient;

// Plain TCP client
let client = UnifiedAsyncClient::connect("127.0.0.1:18944").await?;

// With TLS
let tls_config = rustls::ClientConfig::builder()
    .with_root_certificates(rustls::RootCertStore::empty())
    .with_no_client_auth();
let client = UnifiedAsyncClient::connect_with_tls(
    "localhost",
    18944,
    std::sync::Arc::new(tls_config)
).await?;

Implementations§

Source§

impl UnifiedAsyncClient

Source

pub async fn connect(addr: &str) -> Result<Self>

Connect to a plain TCP server

§Arguments
  • addr - Server address (e.g., “127.0.0.1:18944”)
Source

pub async fn connect_with_tls( hostname: &str, port: u16, tls_config: Arc<ClientConfig>, ) -> Result<Self>

Connect to a TLS-enabled server

§Arguments
  • hostname - Server hostname (for SNI)
  • port - Server port
  • tls_config - TLS client configuration
Source

pub fn with_reconnect(self, config: ReconnectConfig) -> Self

Enable automatic reconnection

§Arguments
  • config - Reconnection configuration
Source

pub fn set_verify_crc(&mut self, verify: bool)

Enable or disable CRC verification

Source

pub fn verify_crc(&self) -> bool

Get current CRC verification setting

Source

pub fn reconnect_count(&self) -> usize

Get reconnection count

Source

pub fn is_connected(&self) -> bool

Check if currently connected

Source

pub async fn send<T: Message>(&mut self, msg: &IgtlMessage<T>) -> Result<()>

Send a message

Source

pub async fn receive<T: Message>(&mut self) -> Result<IgtlMessage<T>>

Receive a message

Source

pub async fn receive_any(&mut self) -> Result<AnyMessage>

Receive any message type dynamically without knowing the type in advance

This method reads the message header first, determines the message type, and then decodes the appropriate message type dynamically.

§Returns

An AnyMessage enum containing the decoded message. If the message type is not recognized, it will be returned as AnyMessage::Unknown with the raw header and body bytes.

§Examples
use openigtlink_rust::io::builder::ClientBuilder;
use openigtlink_rust::protocol::AnyMessage;

let mut client = ClientBuilder::new()
    .tcp("127.0.0.1:18944")
    .async_mode()
    .build()
    .await?;

loop {
    let msg = client.receive_any().await?;

    match msg {
        AnyMessage::Transform(transform_msg) => {
            println!("Received transform from {}",
                     transform_msg.header.device_name.as_str()?);
        }
        AnyMessage::Status(status_msg) => {
            println!("Status: {}", status_msg.content.status_string);
        }
        AnyMessage::Image(image_msg) => {
            println!("Received image: {}x{}x{}",
                     image_msg.content.size[0],
                     image_msg.content.size[1],
                     image_msg.content.size[2]);
        }
        AnyMessage::Unknown { header, .. } => {
            println!("Unknown message type: {}",
                     header.type_name.as_str()?);
        }
        _ => {}
    }
}

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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, 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.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more