forge/bin/icom/examples/server_2_client.rs
2026-05-23 09:23:12 -05:00

80 lines
2.2 KiB
Rust

use forge_icom::client::IComClient;
use serde_json::json;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("Server 2 - ICOM Client");
println!("Connecting to ICOM server...\n");
// Connect to ICOM as server_2
let client = IComClient::connect("127.0.0.1:9090", "server_2".to_string()).await?;
println!("\nSending messages to server_1...\n");
// Wait a moment for server_2 to be ready
tokio::time::sleep(tokio::time::Duration::from_secs(2)).await;
// Example: Supply drop event
println!("Sending supply drop event...");
match client
.send_event(
"server_1",
"supply_drop",
json!({
"coords": [1234.5, 5678.9, 0.0],
"supplies": ["ammo_box", "medical_supplies"]
}),
)
.await
{
Ok(_) => println!("Supply drop event sent\n"),
Err(e) => println!("Supply drop failed: {}\n", e),
}
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
// Example: Mission spawn event
println!("Sending mission spawn event...");
match client
.send_event(
"server_1",
"spawn_mission",
json!({
"mission_type": "convoy_ambush",
"difficulty": "hard",
"location": [1234, 5678, 0]
}),
)
.await
{
Ok(_) => println!("Mission spawn event sent\n"),
Err(e) => println!("Mission spawn failed: {}\n", e),
}
tokio::time::sleep(tokio::time::Duration::from_secs(1)).await;
// Example: Broadcast event
println!("Broadcasting event...");
match client
.broadcast(
"global_alert",
json!({
"message": "Nuclear strike incoming!",
"severity": "critical"
}),
)
.await
{
Ok(_) => println!("Broadcast sent\n"),
Err(e) => println!("Broadcast failed: {}\n", e),
}
println!("All messages sent (check above for any failures)!");
println!("Press Ctrl+C to exit");
// Keep running to receive any responses
tokio::time::sleep(tokio::time::Duration::from_secs(3)).await;
Ok(())
}