use anyhow::Result; use dosh::server::{DoshServer, DoshServerConfig, DoshServerEvent}; use dosh::transport::{SessionEvent, TransportEvent}; #[tokio::main] async fn main() -> Result<()> { let config = DoshServerConfig::default().service("echo")?; let mut server = DoshServer::bind(config).await?; eprintln!("listening on {}", server.local_addr()?); loop { match server.recv().await? { DoshServerEvent::Accepted(client) => { eprintln!( "accepted user={} session={} conn={:?}", client.user, client.session, client.conn_id ); } DoshServerEvent::Session { conn_id, event: SessionEvent::Stream(TransportEvent::Open(open)), } => { server.accept_stream(conn_id, open.stream_id).await?; } DoshServerEvent::Session { conn_id, event: SessionEvent::Stream(TransportEvent::Data(data)), } => { for chunk in data.chunks { server.send(conn_id, data.stream_id, chunk).await?; } } DoshServerEvent::Session { .. } | DoshServerEvent::Ignored => {} } server.maintenance().await?; } }