38 lines
1.3 KiB
Rust
38 lines
1.3 KiB
Rust
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?;
|
|
}
|
|
}
|