Skip to main content

infinity_bridge_host/
lib.rs

1//! ```rust,ignore
2//! use infinity_bridge_host::{BridgeServer, ServerConfig};
3//! use serde_json::json;
4//! use std::time::Duration;
5//!
6//! #[tokio::main]
7//! async fn main() {
8//!     let server = BridgeServer::start(
9//!         ServerConfig::new("127.0.0.1:6969", "/bridge")
10//!     ).await.unwrap();
11//!
12//!     // Wait for a gauge to connect
13//!     server.wait_connected().await;
14//!
15//!     // Send a command and await the response
16//!     let response = server
17//!         .command("get_state", json!({}), Duration::from_secs(3))
18//!         .await
19//!         .unwrap();
20//!
21//!     // Fire-and-forget event to all connected gauges
22//!     server.emit("config_updated", json!({"livery": "AA"})).unwrap();
23//!
24//!     // Receive events from gauges
25//!     let mut events = server.subscribe_events();
26//!     while let Ok(event) = events.recv().await {
27//!         println!("Event: {} = {:?}", event.name, event.data);
28//!     }
29//! }
30//! ```
31//!
32//! ## Integration with Tauri
33//!
34//! The server is framework-agnostic. For Tauri, spawn it on the tokio
35//! runtime and wire `subscribe_events()` to `app.emit()`:
36//!
37//! ```rust,ignore
38//! let server = BridgeServer::start(config).await?;
39//! let app_handle = app.handle().clone();
40//! let mut events = server.subscribe_events();
41//!
42//! tokio::spawn(async move {
43//!     while let Ok(event) = events.recv().await {
44//!         app_handle.emit(&format!("bridge:{}", event.name), &event.data).ok();
45//!     }
46//! });
47//! ```
48
49mod client;
50mod hub;
51mod server;
52
53pub use hub::ClientInfo;
54pub use infinity_bridge_wire::{BridgeError, ErrorKind, EventPayload, HelloPayload};
55pub use server::{BridgeServer, ServerConfig};