echo_server.rs

 1use futures::{SinkExt, StreamExt};
 2use tokio::{self, io, net::TcpSocket};
 3use tokio_util::codec::Framed;
 4
 5use tokio_xmpp::XmppCodec;
 6
 7#[tokio::main]
 8async fn main() -> Result<(), io::Error> {
 9    // TCP socket
10    let address = "127.0.0.1:5222".parse().unwrap();
11    let socket = TcpSocket::new_v4()?;
12    socket.bind(address)?;
13
14    let listener = socket.listen(1024)?;
15
16    // Main loop, accepts incoming connections
17    loop {
18        let (stream, _addr) = listener.accept().await?;
19
20        // Use the `XMPPCodec` to encode and decode frames
21        let mut framed = Framed::new(stream, XmppCodec::new());
22
23        tokio::spawn(async move {
24            while let Some(packet) = framed.next().await {
25                match packet {
26                    Ok(packet) => {
27                        println!("Received packet: {:?}", packet);
28                        framed.send(packet).await.unwrap();
29                    }
30                    Err(e) => {
31                        eprintln!("Error: {:?}", e);
32                    }
33                }
34            }
35        });
36    }
37}