raknet- a pure sans-io implementation (client, server, and session).raknet-tokio- an async tokio wrapper over the sans-io crate.bevy-raknet- a Bevy plugin wrapping the sans-io crate directly.
-
tokio server:
let mut server = RakServer::new(addr, |config| { config.guid = 123456789; config.message = Box::new(*b"my server message"); }); server.start().await?; loop { let mut session = server.accept().await?; tokio::spawn(async move { while let Ok(packet) = session.recv::<Box<[u8]>>().await { let _ = session .send(packet, RakReliability::ReliableOrdered, RakPriority::Immediate) .await; } }); }
-
bevy server:
app.add_plugins(RakServerPlugin) .insert_resource(RakServer::new(addr, |_| {})?) .add_systems(Update, (on_connect, echo).after(RakServerSet)); fn on_connect(mut events: MessageReader<RakServerEvent>, mut commands: Commands) { for event in events.read() { if let RakServerEvent::SessionConnected { id, .. } = event { commands.spawn(Player(*id)); } } } fn echo(mut server: ResMut<RakServer>) { while let Some((id, packet)) = server.recv() { let _ = server.send(id, packet, RakReliability::ReliableOrdered, RakPriority::Immediate); } }