Provides utilities for setting up renet2 servers and clients.
Server workflow
- Define a
GameServerSetupConfigfor your server. - Collect the number of clients who will use each connection type into
ClientCounts.- Clients can send the server their preferred
ConnectionTypeto aid in this (see the client workflow below).
- Clients can send the server their preferred
- Make a
ConnectionConfigwith the channels for your renet2 connection with clients.- This should match the
ConnectionConfigused by your clients. - If using the
bevy_replicon_renet2crate, then the channels can be obtained fromRepliconChannels. UseConnectionConfigs::from_channels.
- This should match the
- Call
setup_combo_renet2_serverto getRenetServer,NetcodeServerTransport, andConnectMetas.- If using the
bevyfeature, callsetup_combo_renet2_server_in_bevyinstead.
- If using the
- Drive the
RenetServerandNetcodeServerTransportforward.- This is handled automatically if you use the
bevy_renet2orbevy_replicon_renet2crates.
- This is handled automatically if you use the
- Use
ConnectMetasto createServerConnectTokensfor clients based on theirConnectionTypes(see the client workflow below).- These 'metas' can be stored on a separate server from the game server.
In-memory connections
Add in-memory clients to ClientCounts and follow the above steps.
WebTransport certificates
This crate uses self-signed certificates to set up webtransport servers. Self-signed certificates only last 2 weeks, so if your game server lives longer than that and you need webtransport, then you should use the underlying renet2/renet2_netcode APIs instead of this crate.
Self-signed certificates are not supported everywhere. We assume clients will fall back to websockets if webtransport with self-signed certs are unavailable. ConnectionType::inferred will detect the best connection type for each client.
WebSocket TLS
Websocket TLS requires a domain name in GameServerSetupConfig and the locations of PEM-encoded cert files (e.g. generated with Let's Encrypt). You must specify the ws-native-tls or ws-rustls feature in addition to ws_server_transport in order to use websocket certs. Note that ws-native-tls requires OpenSSL, which may need to be installed separately on your server host.
If using ws-rustls and no rustls::crypto::CryptoProvider is installed, then rustls::crypto::ring::default_provider().install_default() will be called when setting up a websocket server.
tokio
A default tokio runtime is set up if a server needs webtransport or websockets. If you want to reuse that runtime for something else like a webserver, use enfync::builtin::native::TokioHandle::adopt_or_default to get a handle to it for spawning tokio tasks.
Client workflow
- Send your
ConnectionTypeto the game backend.- Use
ConnectionType::inferredto construct it.
- Use
- Receive
ServerConnectTokenfrom the game backend. - Make a connect pack with
ClientConnectPack::new. - Make a
ConnectionConfigwith the channels for your renet2 connection with the server.- This should match the
ConnectionConfigused by the server. - If using the
bevy_replicon_renet2crate, then the channels can be obtained fromRepliconChannels. UseConnectionConfigs::from_channels.
- This should match the
- Call
setup_renet2_clientto getRenetClientandNetcodeClientTransport.- If using the
bevyfeature, callsetup_renet2_client_in_bevyinstead.
- If using the
- Drive the
RenetClientandNetcodeClientTransportforward.- This is handled automatically if you use the
bevy_renet2orbevy_replicon_renet2crates.
- This is handled automatically if you use the
In-memory connections
Receive ServerConnectToken::Memory from the local server (running in-memory with the client) and follow the above steps.