pub struct SessionManager { /* private fields */ }Expand description
Multi-client session manager
Manages multiple concurrent OpenIGTLink client connections with automatic message routing and broadcasting capabilities.
Implementations§
Source§impl SessionManager
impl SessionManager
Sourcepub async fn new(addr: &str) -> Result<Self>
pub async fn new(addr: &str) -> Result<Self>
Create a new session manager bound to the specified address
§Arguments
addr- Address to bind (e.g., “127.0.0.1:18944”)
§Examples
use openigtlink_rust::io::SessionManager;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let manager = SessionManager::new("0.0.0.0:18944").await?;
Ok(())
}Sourcepub fn local_addr(&self) -> Result<SocketAddr>
pub fn local_addr(&self) -> Result<SocketAddr>
Get the local address this manager is bound to
Sourcepub async fn client_count(&self) -> usize
pub async fn client_count(&self) -> usize
Get the number of active client connections
§Examples
println!("Active clients: {}", manager.client_count().await);Sourcepub async fn client_ids(&self) -> Vec<ClientId> ⓘ
pub async fn client_ids(&self) -> Vec<ClientId> ⓘ
Get a list of all active client IDs
Sourcepub async fn client_info(&self, client_id: ClientId) -> Option<ClientInfo>
pub async fn client_info(&self, client_id: ClientId) -> Option<ClientInfo>
Get information about a specific client
Sourcepub async fn add_handler(&self, handler: Box<dyn MessageHandler>)
pub async fn add_handler(&self, handler: Box<dyn MessageHandler>)
Register a message handler
Handlers are called in the order they were registered.
§Examples
use openigtlink_rust::io::{SessionManager, MessageHandler, ClientId};
struct MyHandler;
impl MessageHandler for MyHandler {
fn handle_message(&self, client_id: ClientId, type_name: &str, data: &[u8]) {
println!("Client {} sent {}", client_id, type_name);
}
}
manager.add_handler(Box::new(MyHandler)).await;Sourcepub async fn accept_clients(&self)
pub async fn accept_clients(&self)
Accept new client connections in a loop
This method runs forever, accepting new clients and spawning handler tasks. It should be run in a separate task.
§Examples
use openigtlink_rust::io::SessionManager;
use std::sync::Arc;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let manager = Arc::new(SessionManager::new("127.0.0.1:18944").await?);
// Spawn acceptor in background
let mgr = manager.clone();
tokio::spawn(async move {
mgr.accept_clients().await;
});
// Do other work...
Ok(())
}Sourcepub async fn broadcast<T: Message + Clone>(&self, message: &T) -> Result<()>
pub async fn broadcast<T: Message + Clone>(&self, message: &T) -> Result<()>
Broadcast a message to all connected clients
§Examples
use openigtlink_rust::io::SessionManager;
use openigtlink_rust::protocol::types::StatusMessage;
let status = StatusMessage::ok("System ready");
manager.broadcast(&status).await?;Sourcepub async fn send_to<T: Message + Clone>(
&self,
client_id: ClientId,
message: &T,
) -> Result<()>
pub async fn send_to<T: Message + Clone>( &self, client_id: ClientId, message: &T, ) -> Result<()>
Send a message to a specific client
§Examples
use openigtlink_rust::io::SessionManager;
use openigtlink_rust::protocol::types::StatusMessage;
let status = StatusMessage::ok("Personal message");
manager.send_to(42, &status).await?;Sourcepub async fn disconnect(&self, client_id: ClientId) -> Result<()>
pub async fn disconnect(&self, client_id: ClientId) -> Result<()>
Disconnect a specific client
Auto Trait Implementations§
impl !Freeze for SessionManager
impl !RefUnwindSafe for SessionManager
impl Send for SessionManager
impl Sync for SessionManager
impl Unpin for SessionManager
impl !UnwindSafe for SessionManager
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more