use std::time::Duration;
use lynn_tcp::{lynn_client::LynnClient, lynn_server::*, lynn_tcp_dependents::*};
use tracing_subscriber::fmt;
pub async fn echo_handler(
input_buf_vo: InputBufVO,
clients_context: ClientsContext,
) -> HandlerResult {
let client_addr = input_buf_vo
.get_input_addr()
.map(|a| a.to_string())
.unwrap_or_else(|| "unknown".to_string());
let payload = input_buf_vo.get_all_bytes();
let payload_str = String::from_utf8_lossy(&payload);
println!(
"📨 [echo_handler] Received from [{}]: {:?}",
client_addr, payload_str
);
let response = format!("Echo: {}", payload_str);
let addrs = clients_context.get_all_clients_addrs().await;
println!(
"📤 [echo_handler] Responding to {} client(s): {:?}",
addrs.len(),
addrs
);
HandlerResult::new_with_send(1, response.into(), addrs)
}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
fmt::init();
println!("🚀 Starting Lynn TCP echo server-client example...");
println!();
let _server_handle = tokio::spawn(async {
let _server = LynnServer::new()
.await
.add_router(1, echo_handler)
.start()
.await;
});
tokio::time::sleep(Duration::from_millis(200)).await;
let mut client = LynnClient::new_with_addr("127.0.0.1:9177")
.await
.start()
.await;
let message = "Hello Lynn!";
println!(
"📤 [client] Sending to server: method_id=1, payload={:?}",
message
);
client
.send_data(HandlerResult::new_with_send_to_server(1, message.into()))
.await?;
println!("⏳ [client] Waiting for server response...");
if let Some(mut response) = client.get_receive_data().await {
let method_id = response.get_method_id();
let payload = response.get_all_bytes();
let payload_str = String::from_utf8_lossy(&payload);
println!(
"📥 [client] Got response: method_id={:?}, payload={:?}",
method_id, payload_str
);
if payload_str.starts_with("Echo: ") {
println!("✅ [client] Successfully received echoed response!");
} else {
println!("⚠️ [client] Response doesn't have expected 'Echo:' prefix");
}
} else {
println!("❌ [client] No response received from server");
}
tokio::time::sleep(Duration::from_millis(100)).await;
println!();
println!("🏁 Echo server-client example completed successfully!");
Ok(())
}