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}