Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use wasm_bindgen_futures::spawn_local instead of BevyIoTaskPool in wasm #352

Merged
merged 4 commits into from
May 14, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions examples/auth/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>Bevy game</title>
<link data-trunk rel="rust"/>
</head>
</html>
1 change: 1 addition & 0 deletions examples/bullet_prespawn/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>Bevy game</title>
<link data-trunk rel="rust"/>
</head>
</html>
1 change: 1 addition & 0 deletions examples/client_replication/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>Bevy game</title>
<link data-trunk rel="rust"/>
</head>
</html>
7 changes: 4 additions & 3 deletions examples/common/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,9 @@ description = "Common harness for the lightyear examples"

[dependencies]
lightyear = { path = "../../lightyear", features = [
"steam",
"webtransport",
"websocket",
"steam",
"webtransport",
"websocket",
] }

# utils
Expand All @@ -17,6 +17,7 @@ async-compat = "0.2.3"
cfg-if = "1.0.0"
clap = { version = "4.5.4", features = ["derive"] }
crossbeam-channel = "0.5.12"
rand = "0.8.5"
serde = { version = "1.0.201", features = ["derive"] }


Expand Down
7 changes: 5 additions & 2 deletions examples/common/src/settings.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,17 @@
#![allow(unused_variables)]
use std::net::{Ipv4Addr, SocketAddr};

use async_compat::Compat;
use bevy::asset::ron;
use bevy::prelude::Resource;
use bevy::tasks::IoTaskPool;
use bevy::utils::Duration;
use serde::de::DeserializeOwned;
use serde::{Deserialize, Serialize};

#[cfg(not(target_family = "wasm"))]
use async_compat::Compat;
#[cfg(not(target_family = "wasm"))]
use bevy::tasks::IoTaskPool;

use lightyear::prelude::client::Authentication;
#[cfg(not(target_family = "wasm"))]
use lightyear::prelude::client::SteamConfig;
Expand Down
1 change: 1 addition & 0 deletions examples/interest_management/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>Bevy game</title>
<link data-trunk rel="rust"/>
</head>
</html>
1 change: 1 addition & 0 deletions examples/leafwing_inputs/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>Bevy game</title>
<link data-trunk rel="rust"/>
</head>
</html>
1 change: 1 addition & 0 deletions examples/lobby/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>Bevy game</title>
<link data-trunk rel="rust"/>
</head>
</html>
1 change: 1 addition & 0 deletions examples/priority/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>Bevy game</title>
<link data-trunk rel="rust"/>
</head>
</html>
1 change: 1 addition & 0 deletions examples/replication_groups/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>Bevy game</title>
<link data-trunk rel="rust"/>
</head>
</html>
1 change: 1 addition & 0 deletions examples/simple_box/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,6 @@
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">
<title>Bevy game</title>
<link data-trunk rel="rust"/>
</head>
</html>
2 changes: 1 addition & 1 deletion lightyear/src/client/io/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ impl ClientTransport {
client_addr,
server_addr,
certificate_digest,
} => TransportBuilderEnum::WebTransportClient(WebTransportClientSocketBuilder {
} => ClientTransportBuilderEnum::WebTransportClient(WebTransportClientSocketBuilder {
client_addr,
server_addr,
certificate_digest,
Expand Down
2 changes: 1 addition & 1 deletion lightyear/src/client/io/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ impl Io {
self.state = IoState::Disconnected;
if let Some(event_sender) = self.context.event_sender.as_mut() {
event_sender
.send_blocking(ClientIoEvent::Disconnected(
.try_send(ClientIoEvent::Disconnected(
std::io::Error::other("client requested disconnection").into(),
))
.map_err(Error::from)?;
Expand Down
4 changes: 2 additions & 2 deletions lightyear/src/connection/netcode/server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1016,7 +1016,7 @@ impl NetServer for Server {
if let Some(mut io) = self.io.take() {
if let Some(sender) = &mut self.server.cfg.context.sender {
sender
.send_blocking(ServerIoEvent::ServerDisconnected(
.try_send(ServerIoEvent::ServerDisconnected(
crate::transport::error::Error::UserRequest,
))
.context("Could not send 'ServerStopped' event to io")?;
Expand Down Expand Up @@ -1108,7 +1108,7 @@ impl Server {
if let Some(sender) = &mut ctx.sender {
debug!("Notify the io that client {id:?} got disconnected, so that we can stop the corresponding task");
let _ = sender
.send_blocking(ServerIoEvent::ClientDisconnected(addr))
.try_send(ServerIoEvent::ClientDisconnected(addr))
.inspect_err(|e| {
error!("Error sending 'ClientDisconnected' event to io: {:?}", e)
});
Expand Down
4 changes: 0 additions & 4 deletions lightyear/src/server/io/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ use crate::transport::middleware::compression::zstd::compression::ZstdCompressor
use crate::transport::middleware::compression::zstd::decompression::ZstdDecompressor;
use crate::transport::middleware::conditioner::LinkConditioner;
use crate::transport::middleware::{PacketReceiverWrapper, PacketSenderWrapper};
#[cfg(not(target_family = "wasm"))]
use crate::transport::udp::UdpSocketBuilder;
#[cfg(all(feature = "websocket", not(target_family = "wasm")))]
use crate::transport::websocket::server::WebSocketServerSocketBuilder;
Expand All @@ -28,7 +27,6 @@ use wtransport::Identity;
#[derive(Debug, TypePath)]
pub enum ServerTransport {
/// Use a [`UdpSocket`](std::net::UdpSocket)
#[cfg(not(target_family = "wasm"))]
UdpSocket(SocketAddr),
/// Use [`WebTransport`](https://wicg.github.io/web-transport/) as a transport layer
#[cfg(all(feature = "webtransport", not(target_family = "wasm")))]
Expand Down Expand Up @@ -58,7 +56,6 @@ impl Clone for ServerTransport {
#[inline]
fn clone(&self) -> ServerTransport {
match self {
#[cfg(not(target_family = "wasm"))]
ServerTransport::UdpSocket(__self_0) => {
ServerTransport::UdpSocket(Clone::clone(__self_0))
}
Expand Down Expand Up @@ -87,7 +84,6 @@ impl Clone for ServerTransport {
impl ServerTransport {
fn build(self) -> ServerTransportBuilderEnum {
match self {
#[cfg(not(target_family = "wasm"))]
ServerTransport::UdpSocket(addr) => {
ServerTransportBuilderEnum::UdpSocket(UdpSocketBuilder { local_addr: addr })
}
Expand Down
2 changes: 1 addition & 1 deletion lightyear/src/server/io/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ impl Io {
self.state = IoState::Disconnected;
if let Some(event_sender) = self.context.event_sender.as_mut() {
event_sender
.send_blocking(ServerIoEvent::ServerDisconnected(
.try_send(ServerIoEvent::ServerDisconnected(
std::io::Error::other("server requested disconnection").into(),
))
.map_err(Error::from)?;
Expand Down
3 changes: 0 additions & 3 deletions lightyear/src/server/io/transport.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ use crate::transport::channels::Channels;
use crate::transport::dummy::DummyIo;
use crate::transport::error::Result;
use crate::transport::io::IoState;
#[cfg(not(target_family = "wasm"))]
use crate::transport::udp::{UdpSocket, UdpSocketBuilder};
#[cfg(all(feature = "websocket", not(target_family = "wasm")))]
use crate::transport::websocket::server::{WebSocketServerSocket, WebSocketServerSocketBuilder};
Expand All @@ -29,7 +28,6 @@ pub(crate) trait ServerTransportBuilder: Send + Sync {

#[enum_dispatch(ServerTransportBuilder)]
pub(crate) enum ServerTransportBuilderEnum {
#[cfg(not(target_family = "wasm"))]
UdpSocket(UdpSocketBuilder),
#[cfg(all(feature = "webtransport", not(target_family = "wasm")))]
WebTransportServer(WebTransportServerSocketBuilder),
Expand All @@ -42,7 +40,6 @@ pub(crate) enum ServerTransportBuilderEnum {
#[allow(clippy::large_enum_variant)]
#[enum_dispatch(Transport)]
pub(crate) enum ServerTransportEnum {
#[cfg(not(target_family = "wasm"))]
UdpSocket(UdpSocket),
#[cfg(all(feature = "webtransport", not(target_family = "wasm")))]
WebTransportServer(WebTransportServerSocket),
Expand Down
1 change: 0 additions & 1 deletion lightyear/src/transport/dummy.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ use crate::client::io::{ClientIoEventReceiver, ClientNetworkEventSender};
use crate::server::io::transport::{ServerTransportBuilder, ServerTransportEnum};
use crate::server::io::{ServerIoEventReceiver, ServerNetworkEventSender};
use crate::transport::io::IoState;
use crate::transport::udp::{UdpSocket, UdpSocketBuffer, UdpSocketBuilder};
use crate::transport::{
BoxedReceiver, BoxedSender, PacketReceiver, PacketSender, Transport, LOCAL_SOCKET, MTU,
};
Expand Down
8 changes: 8 additions & 0 deletions lightyear/src/transport/error.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,14 @@ impl<T> ::core::convert::From<async_channel::SendError<T>> for Error {
}
}

#[allow(unused_qualifications)]
impl<T> ::core::convert::From<async_channel::TrySendError<T>> for Error {
#[allow(deprecated)]
fn from(source: async_channel::TrySendError<T>) -> Self {
Error::Channel(source.to_string())
}
}

#[allow(unused_qualifications)]
impl<T> ::core::convert::From<crossbeam_channel::SendError<T>> for Error {
#[allow(deprecated)]
Expand Down
1 change: 0 additions & 1 deletion lightyear/src/transport/local.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ use crate::client::io::{ClientIoEventReceiver, ClientNetworkEventSender};
use crate::server::io::transport::{ServerTransportBuilder, ServerTransportEnum};
use crate::server::io::{ServerIoEventReceiver, ServerNetworkEventSender};
use crate::transport::io::IoState;
use crate::transport::udp::UdpSocketBuilder;
use crate::transport::{
BoxedReceiver, BoxedSender, PacketReceiver, PacketSender, Transport, LOCAL_SOCKET,
};
Expand Down
3 changes: 0 additions & 3 deletions lightyear/src/transport/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ use crate::transport::channels::Channels;
use crate::transport::dummy::DummyIo;
use crate::transport::io::IoState;
use crate::transport::local::{LocalChannel, LocalChannelBuilder};
#[cfg(not(target_family = "wasm"))]
use crate::transport::udp::{UdpSocket, UdpSocketBuilder};
#[cfg(feature = "websocket")]
use crate::transport::websocket::client::{WebSocketClientSocket, WebSocketClientSocketBuilder};
Expand All @@ -35,8 +34,6 @@ pub mod io;
pub(crate) mod local;

/// The transport is a UDP socket
#[cfg_attr(docsrs, doc(cfg(not(target_family = "wasm"))))]
#[cfg(not(target_family = "wasm"))]
pub(crate) mod udp;

/// The transport is a map of channels (used for server, during testing)
Expand Down
1 change: 1 addition & 0 deletions lightyear/src/transport/udp.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ impl UdpSocketBuilder {
}
}

#[cfg(not(target_family = "wasm"))]
impl ClientTransportBuilder for UdpSocketBuilder {
fn connect(
self,
Expand Down
8 changes: 4 additions & 4 deletions lightyear/src/transport/websocket/client_wasm.rs
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ impl ClientTransportBuilder for WebSocketClientSocketBuilder {
)> {
let (serverbound_tx, serverbound_rx) = unbounded_channel::<Vec<u8>>();
let (clientbound_tx, clientbound_rx) = unbounded_channel::<Vec<u8>>();
let (close_tx, mut close_rx) = crossbeam_channel::bounded(1);
let (close_tx, close_rx) = async_channel::bounded(1);

let sender = WebSocketClientSocketSender { serverbound_tx };

Expand Down Expand Up @@ -83,7 +83,7 @@ impl ClientTransportBuilder for WebSocketClientSocketBuilder {
let on_open_callback = Closure::<dyn FnOnce()>::once(move || {
info!("WebSocket handshake has been successfully completed");
let serverbound_rx = serverbound_rx.clone();
IoTaskPool::get().spawn_local(async move {
wasm_bindgen_futures::spawn_local(async move {
while let Some(msg) = serverbound_rx.lock().await.recv().await {
if ws_clone.ready_state() != 1 {
warn!("Tried to send packet through closed websocket connection");
Expand All @@ -96,8 +96,8 @@ impl ClientTransportBuilder for WebSocketClientSocketBuilder {

let ws_clone = ws.clone();
let listen_close_signal_callback = Closure::<dyn FnOnce()>::once(move || {
IoTaskPool::get().spawn_local(async move {
close_rx.recv().await;
wasm_bindgen_futures::spawn_local(async move {
let _ = close_rx.recv().await;
info!("Close websocket connection");
ws_clone.close().unwrap();
});
Expand Down
Loading
Loading