use lynn_tcp::{lynn_server::*, lynn_tcp_dependents::*};
use tracing_subscriber::fmt;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
fmt::init();
println!("🚀 Starting basic Lynn TCP server on default address 0.0.0.0:9177...");
println!();
let _server = LynnServer::new()
.await
.add_router(1, ping_handler)
.add_router(2, echo_handler)
.add_router(3, broadcast_handler)
.start()
.await;
Ok(())
}
pub async fn ping_handler() -> HandlerResult {
println!("📡 [ping_handler] Received ping, no response sent");
HandlerResult::new_without_send()
}
pub async fn echo_handler(input_buf_vo: InputBufVO) -> HandlerResult {
let client_addr = input_buf_vo
.get_input_addr()
.map(|a| a.to_string())
.unwrap_or_else(|| "unknown".to_string());
let data_len = input_buf_vo.get_all_bytes().len();
println!(
"📨 [echo_handler] Received {} bytes from client [{}]",
data_len, client_addr
);
HandlerResult::new_without_send()
}
pub async fn broadcast_handler(clients_context: ClientsContext) -> HandlerResult {
let addrs = clients_context.get_all_clients_addrs().await;
println!(
"📢 [broadcast_handler] Broadcasting to {} connected client(s): {:?}",
addrs.len(),
addrs
);
if !addrs.is_empty() {
HandlerResult::new_with_send(3, "Hello from Lynn TCP server!".into(), addrs)
} else {
HandlerResult::new_without_send()
}
}