use openigtlink_rust::{
io::{builder::ClientBuilder, IgtlServer},
protocol::{message::IgtlMessage, types::StatusMessage},
};
use std::thread;
use std::time::Duration;
use tracing::info;
use tracing_subscriber::EnvFilter;
fn main() -> Result<(), Box<dyn std::error::Error>> {
tracing_subscriber::fmt()
.with_env_filter(
EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("debug")),
)
.with_target(true)
.with_thread_ids(true)
.with_line_number(true)
.init();
info!("=== OpenIGTLink Logging Demo ===");
info!("This example demonstrates structured logging throughout the library");
let server_thread = thread::spawn(|| {
info!("Server thread started");
let server = IgtlServer::bind("127.0.0.1:18944").expect("Failed to bind server");
info!("Server ready to accept connections");
let mut conn = server.accept().expect("Failed to accept connection");
let msg: IgtlMessage<StatusMessage> = conn.receive().expect("Failed to receive message");
info!("Server received status: {}", msg.content.status_string);
let response = StatusMessage::ok("Message received successfully");
let response_msg = IgtlMessage::new(response, "Server").expect("Failed to create message");
conn.send(&response_msg).expect("Failed to send response");
info!("Server thread completed");
});
thread::sleep(Duration::from_millis(100));
info!("Client starting connection");
let mut client = ClientBuilder::new().tcp("127.0.0.1:18944").sync().build()?;
info!("Client connected, preparing to send message");
client.set_verify_crc(false); client.set_verify_crc(true);
let status = StatusMessage::ok("Hello from client");
let msg = IgtlMessage::new(status, "Client")?;
client.send(&msg)?;
info!("Client sent message, waiting for response");
let response: IgtlMessage<StatusMessage> = client.receive()?;
info!(
"Client received response: {}",
response.content.status_string
);
server_thread.join().expect("Server thread panicked");
info!("=== Demo completed successfully ===");
info!("Try running with different RUST_LOG values to see different log levels:");
info!(" RUST_LOG=trace cargo run --example logging_demo # All logs");
info!(" RUST_LOG=debug cargo run --example logging_demo # Debug and above");
info!(" RUST_LOG=info cargo run --example logging_demo # Info and above");
Ok(())
}