From 56dc1c6e605e4ddb120b525bd164a950e379c32e Mon Sep 17 00:00:00 2001 From: Parker Date: Thu, 13 Jun 2024 15:16:55 -0400 Subject: [PATCH] Added `XmppCodec` usage example --- tokio-xmpp/examples/echo_server.rs | 37 ++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 tokio-xmpp/examples/echo_server.rs diff --git a/tokio-xmpp/examples/echo_server.rs b/tokio-xmpp/examples/echo_server.rs new file mode 100644 index 0000000..096ede0 --- /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); + } + } + } + }); + } +}