19 releases
0.1.3 | Mar 5, 2023 |
---|---|
0.1.2 | Mar 5, 2023 |
0.0.15 | Mar 5, 2023 |
0.0.14 | Jul 18, 2022 |
0.0.12 | Oct 17, 2021 |
#17 in #data-channel
Used in gorgon
27KB
284 lines
Cyberdeck
A library for easily creating WebRTC data channel connections in Rust.
cargo add cyberdeck
let mut peer = Peer::new(|peer_id, e| async move {
match e {
PeerEvent::DataChannelMessage(c, m) => {
println!(
"{}::Recieved a message from channel {} with id {}!",
peer_id,
c.label(),
c.id()
);
let msg_str = String::from_utf8(m.data.to_vec()).unwrap();
println!(
"{}::Message from DataChannel '{}': {}",
peer_id,
c.label(),
msg_str
);
}
PeerEvent::DataChannelStateChange(c) => {
if c.ready_state() == RTCDataChannelState::Open {
println!("{}::DataChannel '{}'", peer_id, c.label());
c.send_text("Connected to client!".to_string())
.await
.unwrap();
} else if c.ready_state() == RTCDataChannelState::Closed {
println!("{}::DataChannel '{}'", peer_id, c.label());
}
}
PeerEvent::PeerConnectionStateChange(s) => {
println!("{}::Peer connection state: {} ", peer_id, s)
}
}
})
.await?;
let answer = peer.receive_offer(&offer).await?;
Signaling server
WebRTC works in it's most basic form by having the client and server exchange strings that represent their networking information. A signaling server is just some API that you exchange that information through. You can see a simple signaling server implemented with a single POST http handler here in this example here.
cargo run --example signaling_server
License
This project is licensed under either of
- Apache License, Version 2.0, (LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or http://opensource.org/licenses/MIT)
at your option.
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in cyberdeck
by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.
Dependencies
~32–43MB
~821K SLoC