0.3.5-alpha.9
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
// file: crates/common/game-realtime-webtransport-lib/src/webtransport_wasm.rs
|
||||
// version: 2
|
||||
// version: 3
|
||||
|
||||
const CERTIFICATE_HASH_SIZE: usize = 32;
|
||||
const FRAME_PROTOCOL_ERROR_CODE: u32 = 0x10;
|
||||
@@ -123,6 +123,36 @@ impl WebTransportSession {
|
||||
pub fn endpoint(&self) -> &str {
|
||||
return self.inner.url().as_str();
|
||||
}
|
||||
|
||||
/// Returns the maximum payload size accepted by the browser WebTransport datagram path.
|
||||
#[must_use]
|
||||
pub fn max_datagram_size(&self) -> usize {
|
||||
return self.inner.max_datagram_size();
|
||||
}
|
||||
|
||||
/// Sends one browser WebTransport datagram without reliability or ordering guarantees.
|
||||
///
|
||||
/// This capability is intentionally not part of `RealtimeConnection`.
|
||||
pub async fn send_datagram(&self, payload: &[u8]) -> Result<(), game_realtime_transport_lib::TransportError> {
|
||||
let max_datagram_size = self.max_datagram_size();
|
||||
if payload.len() > max_datagram_size {
|
||||
return Err(datagram_too_large(payload.len(), max_datagram_size));
|
||||
}
|
||||
return match self.inner.send_datagram(payload.to_vec().into()).await {
|
||||
Ok(()) => Ok(()),
|
||||
Err(error) => Err(map_write_error(error)),
|
||||
};
|
||||
}
|
||||
|
||||
/// Receives one browser WebTransport datagram without reliability or ordering guarantees.
|
||||
///
|
||||
/// The caller is responsible for applying any operation deadline required by its use case.
|
||||
pub async fn receive_datagram(&self) -> Result<Vec<u8>, game_realtime_transport_lib::TransportError> {
|
||||
return match self.inner.recv_datagram().await {
|
||||
Ok(payload) => Ok(payload.to_vec()),
|
||||
Err(error) => Err(map_read_error(error)),
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
/// Established browser WebTransport connection carrying the single reliable primary stream.
|
||||
@@ -588,6 +618,13 @@ fn map_write_error(error: web_transport_wasm::Error) -> game_realtime_transport_
|
||||
return transport_error(kind, error.to_string());
|
||||
}
|
||||
|
||||
fn datagram_too_large(payload_len: usize, max_datagram_size: usize) -> game_realtime_transport_lib::TransportError {
|
||||
return transport_error(
|
||||
game_realtime_transport_lib::TransportErrorKind::MessageTooLarge,
|
||||
format!("WebTransport datagram payload size {payload_len} exceeds current session maximum {max_datagram_size} bytes"),
|
||||
);
|
||||
}
|
||||
|
||||
fn message_too_large(payload_len: usize, max_message_size: usize) -> game_realtime_transport_lib::TransportError {
|
||||
return transport_error(
|
||||
game_realtime_transport_lib::TransportErrorKind::MessageTooLarge,
|
||||
|
||||
Reference in New Issue
Block a user