xmpp-rs/tokio-xmpp/examples/echo_server.rs

48 lines
1.4 KiB
Rust
Raw Normal View History

2024-06-13 19:16:55 +00:00
use futures::{SinkExt, StreamExt};
use tokio::{self, io, net::TcpSocket};
use tokio_xmpp::{
minidom::Element,
parsers::stream_features::StreamFeatures,
xmlstream::{accept_stream, StreamHeader, Timeouts},
};
2024-06-13 19:16:55 +00:00
#[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?;
let stream = accept_stream(
tokio::io::BufStream::new(stream),
tokio_xmpp::parsers::ns::DEFAULT_NS,
Timeouts::default(),
)
.await?;
let stream = stream.send_header(StreamHeader::default()).await?;
let mut stream = stream
.send_features::<Element>(&StreamFeatures::default())
.await?;
2024-06-13 19:16:55 +00:00
tokio::spawn(async move {
while let Some(packet) = stream.next().await {
2024-06-13 19:16:55 +00:00
match packet {
Ok(packet) => {
println!("Received packet: {:?}", packet);
stream.send(&packet).await.unwrap();
2024-06-13 19:16:55 +00:00
}
Err(e) => {
eprintln!("Error: {:?}", e);
}
}
}
});
}
}