3 releases (breaking)
new 0.4.0 | Feb 19, 2025 |
---|---|
0.3.0 | Feb 7, 2025 |
0.2.0 | Feb 7, 2025 |
#705 in Game dev
310 downloads per month
230KB
4K
SLoC
Provides utilities for setting up renet2
servers and clients.
Server workflow
- Define a
GameServerSetupConfig
for your server. - Collect the number of clients who will use each connection type into
ClientCounts
. - Make a
ConnectionConfig
with the channels for your renet2 connection with clients.- This should match the
ConnectionConfigs
used by your clients. - If using the
bevy_replicon_renet2
crate, then the channels can be obtained fromRepliconChannels
. UseConnectionConfigs::from_channels
.
- This should match the
- Call
setup_combo_renet2_server
to getRenetServe
,NetcodeServerTransport
, andConnectMetas
.- If using the
bevy
feature, callsetup_combo_renet2_server_in_bevy
instead.
- If using the
- Drive the
RenetServer
andNetcodeServerTransport
forward.- This is handled automatically if you use the
bevy_renet2
crate.
- This is handled automatically if you use the
- Use
ConnectMetas
to createServerConnectTokens
for clients based on theirConnectionTypes
.- 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 correct 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.
Client workflow
- Send your
ConnectionType
to the game backend.- Use
ConnectionType::inferred
to construct it.
- Use
- Receive
ServerConnectToken
from the game backend. - Make a connect pack with
ClientConnectPack::new
. - Make a
ConnectionConfig
with the channels for your renet2 connection with the server.- This should match the
ConnectionConfig
used by the server. - If using the
bevy_replicon_renet2
crate, then the channels can be obtained fromRepliconChannels
. UseConnectionConfigs::from_channels
.
- This should match the
- Call
setup_renet2_client
to getRenetClient
andNetcodeClientTransport
.- If using the
bevy
feature, callsetup_renet2_client_in_bevy
instead.
- If using the
- Drive the
RenetClient
andNetcodeClientTransport
forward.- This is handled automatically if you use the
bevy_renet2
crate.
- 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.
Dependencies
~3–20MB
~308K SLoC