🦀/100 Projects/Notes/Source

src/main.rs

View on GitHub
use tokio::net::TcpListener;
use tokio_tungstenite::accept_async;
use tokio_tungstenite::tungstenite::Message;
use futures_util::StreamExt; 
use futures_util::SinkExt;   

#[tokio::main]
async fn main() {
    println!("🌐 WebSocket Echo Server running on ws://127.0.0.1:9001");

    let listener = TcpListener::bind("127.0.0.1:9001").await.expect("Failed to bind to port");

    while let Ok((stream, addr)) = listener.accept().await {
        println!("🔌 New connection from: {}", addr);

        tokio::spawn(async move {
            match accept_async(stream).await {
                Ok(ws_stream) => {
                    let (mut write, mut read) = ws_stream.split();
                    
                    while let Some(msg) = read.next().await {
                        match msg {
                            Ok(Message::Text(text)) => {
                                println!("📨 Received text: {}", text);
                                if let Err(e) = write.send(Message::Text(text)).await {
                                    eprintln!("❌ Send error: {}", e);
                                    break;
                                }
                            }
                            Ok(Message::Binary(bin)) => {
                                println!("📨 Received binary ({} bytes)", bin.len());
                                if let Err(e) = write.send(Message::Binary(bin)).await {
                                    eprintln!("❌ Send error: {}", e);
                                    break;
                                }
                            }
                            Ok(Message::Ping(ping)) => {
                                if let Err(e) = write.send(Message::Pong(ping)).await {
                                    eprintln!("❌ Send error: {}", e);
                                    break;
                                }
                            }
                            Ok(Message::Close(_)) => {
                                println!("🚪 Client disconnected");
                                break;
                            }
                            Ok(_) => {}  // Ignore other message types
                            Err(e) => {
                                eprintln!("❌ Error reading message: {}", e);
                                break;
                            }
                        }
                    }
                }
                Err(e) => eprintln!("❌ WebSocket handshake failed: {}", e),
            }
        });
    }
}

← Back to folder