diff --git a/tokio-xmpp/examples/echo_server.rs b/tokio-xmpp/examples/echo_server.rs new file mode 100644 index 00000000..096ede0f --- /dev/null +++ b/tokio-xmpp/examples/echo_server.rs @@ -0,0 +1,37 @@ +use futures::{SinkExt, StreamExt}; +use tokio::{self, io, net::TcpSocket}; +use tokio_util::codec::Framed; + +use tokio_xmpp::XMPPCodec; + +#[tokio::main] +async fn main() -> Result<(), io::Error> { + // TCP socket + let address = "127.0.0.1:5222".parse().unwrap(); + let socket = TcpSocket::new_v4()?; + socket.bind(address)?; + + let listener = socket.listen(1024)?; + + // Main loop, accepts incoming connections + loop { + let (stream, _addr) = listener.accept().await?; + + // Use the `XMPPCodec` to encode and decode frames + let mut framed = Framed::new(stream, XMPPCodec::new()); + + tokio::spawn(async move { + while let Some(packet) = framed.next().await { + match packet { + Ok(packet) => { + println!("Received packet: {:?}", packet); + framed.send(packet).await.unwrap(); + } + Err(e) => { + eprintln!("Error: {:?}", e); + } + } + } + }); + } +}