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};