79 lines
2.1 KiB
Rust
79 lines
2.1 KiB
Rust
use hero_websocket_client::CircleWsClientBuilder;
|
|
use hero_websocket_server::ServerBuilder;
|
|
use std::time::Instant;
|
|
use tokio::signal;
|
|
use tokio::time::{sleep, timeout, Duration};
|
|
|
|
const CIRCLE_PUBLIC_KEY: &str = "circle_public_key";
|
|
|
|
#[tokio::main]
|
|
async fn main() -> Result<(), Box<dyn std::error::Error>> {
|
|
println!("🔗 Minimal WebSocket Ping Example");
|
|
|
|
// Build server
|
|
let server = match ServerBuilder::new()
|
|
.host("127.0.0.1")
|
|
.port(8443)
|
|
.redis_url("redis://localhost:6379")
|
|
.worker_id("test")
|
|
.build() {
|
|
Ok(server) => {
|
|
println!("🚀 Built server...");
|
|
server
|
|
},
|
|
Err(e) => {
|
|
eprintln!("Failed to build server: {}", e);
|
|
return Err(e.into());
|
|
}
|
|
};
|
|
|
|
// Start server
|
|
println!("🚀 Starting server...");
|
|
let (server_task, server_handle) = server.spawn_circle_server().map_err(|e| {
|
|
eprintln!("Failed to start server: {}", e);
|
|
e
|
|
})?;
|
|
|
|
// Setup signal handling for clean shutdown
|
|
let server_handle_clone = server_handle.clone();
|
|
tokio::spawn(async move {
|
|
signal::ctrl_c().await.expect("Failed to listen for Ctrl+C");
|
|
println!("\n🔌 Shutting down...");
|
|
server_handle_clone.stop(true).await;
|
|
std::process::exit(0);
|
|
});
|
|
|
|
// Brief pause for server startup
|
|
sleep(Duration::from_millis(200)).await;
|
|
|
|
// Connect client
|
|
let mut client = CircleWsClientBuilder::new(format!("ws://localhost:8443/{}", CIRCLE_PUBLIC_KEY)).build();
|
|
|
|
match client.connect().await {
|
|
Ok(_) => println!("✅ Client Connected"),
|
|
Err(e) => {
|
|
eprintln!("Failed to connect: {}", e);
|
|
return Err(e.into());
|
|
}
|
|
}
|
|
|
|
// Send one ping
|
|
print!("📤 Ping... ");
|
|
let response = client.ping().await;
|
|
match response {
|
|
Ok(response) => {
|
|
println!("📥 {}", response);
|
|
}
|
|
Err(e) => {
|
|
eprintln!("Failed to ping: {}", e);
|
|
return Err(e.into());
|
|
}
|
|
}
|
|
|
|
// Clean shutdown
|
|
client.disconnect().await;
|
|
server_handle.stop(true).await;
|
|
println!("✅ Done");
|
|
|
|
Ok(())
|
|
} |