Document Dosh Rust SDK examples
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
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?;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user