client renet 0.11

This commit is contained in:
Henri Bourcereau 2023-10-30 14:25:05 +01:00
parent 1ae1eceda8
commit 2f5f051957
4 changed files with 35 additions and 37 deletions

1
Cargo.lock generated
View file

@ -3346,6 +3346,7 @@ dependencies = [
name = "trictrac-client" name = "trictrac-client"
version = "0.1.0" version = "0.1.0"
dependencies = [ dependencies = [
"anyhow",
"bevy", "bevy",
"bevy_renet", "bevy_renet",
"renet", "renet",

View file

@ -6,6 +6,7 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies] [dependencies]
anyhow = "1.0.75"
bevy = { version = "0.11.3" } bevy = { version = "0.11.3" }
bevy_renet = "0.0.9" bevy_renet = "0.0.9"
renet = "0.0.13" renet = "0.0.13"

View file

@ -1,12 +1,10 @@
use std::{net::UdpSocket, time::SystemTime};
use bevy::prelude::*; use bevy::prelude::*;
use bevy_renet::RenetClientPlugin; use bevy_renet::RenetClientPlugin;
use std::{net::UdpSocket, time::SystemTime};
use renet::{ use renet::{
transport::{ transport::{ClientAuthentication, NetcodeClientTransport, NETCODE_USER_DATA_BYTES},
ClientAuthentication, NETCODE_USER_DATA_BYTES, ConnectionConfig, RenetClient,
},
RenetClient, ConnectionConfig,
}; };
// This id needs to be the same as the server is using // This id needs to be the same as the server is using
@ -17,28 +15,31 @@ fn main() {
let args = std::env::args().collect::<Vec<String>>(); let args = std::env::args().collect::<Vec<String>>();
let username = &args[1]; let username = &args[1];
let client = RenetClient::new(ConnectionConfig::default());
App::new() App::new()
.insert_resource(WindowDescriptor {
// Adding the username to the window title makes debugging a whole lot easier.
title: format!("TricTrac <{}>", username),
width: 480.0,
height: 540.0,
..default()
})
// Lets add a nice dark grey background color // Lets add a nice dark grey background color
.insert_resource(ClearColor(Color::hex("282828").unwrap())) .insert_resource(ClearColor(Color::hex("282828").unwrap()))
.add_plugins(DefaultPlugins) .add_plugins(DefaultPlugins.set(WindowPlugin {
primary_window: Some(Window {
// Adding the username to the window title makes debugging a whole lot easier.
title: format!("TricTrac <{}>", username),
resolution: (480.0, 540.0).into(),
..default()
}),
..default()
}))
// Renet setup // Renet setup
.add_plugin(RenetClientPlugin) .add_plugins(RenetClientPlugin)
.insert_resource(new_renet_client(&username).unwrap()) .insert_resource(client)
.add_system(handle_renet_error) .insert_resource(new_renet_transport(&username).unwrap())
// .add_system(handle_renet_error)
.run(); .run();
} }
////////// RENET NETWORKING ////////// ////////// RENET NETWORKING //////////
// Creates a RenetClient thats already connected to a server. // Creates a RenetClient thats already connected to a server.
// Returns an Err if connection fails // Returns an Err if connection fails
fn new_renet_client(username: &String) -> anyhow::Result<RenetClient> { fn new_renet_transport(username: &String) -> anyhow::Result<NetcodeClientTransport> {
let server_addr = "127.0.0.1:5000".parse()?; let server_addr = "127.0.0.1:5000".parse()?;
let socket = UdpSocket::bind("127.0.0.1:0")?; let socket = UdpSocket::bind("127.0.0.1:0")?;
let current_time = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH)?; let current_time = SystemTime::now().duration_since(SystemTime::UNIX_EPOCH)?;
@ -52,26 +53,21 @@ fn new_renet_client(username: &String) -> anyhow::Result<RenetClient> {
user_data[0..8].copy_from_slice(&(username.len() as u64).to_le_bytes()); user_data[0..8].copy_from_slice(&(username.len() as u64).to_le_bytes());
user_data[8..username.len() + 8].copy_from_slice(username.as_bytes()); user_data[8..username.len() + 8].copy_from_slice(username.as_bytes());
let client = RenetClient::new( let authentication = ClientAuthentication::Unsecure {
current_time, server_addr,
socket,
client_id, client_id,
RenetConnectionConfig::default(), user_data: Some(user_data),
ClientAuthentication::Unsecure { protocol_id: PROTOCOL_ID,
client_id, };
protocol_id: PROTOCOL_ID, let transport = NetcodeClientTransport::new(current_time, authentication, socket).unwrap();
server_addr,
user_data: Some(user_data),
},
)?;
Ok(client) Ok(transport)
} }
// If there's any network error we just panic 🤷‍♂️ // If there's any network error we just panic 🤷‍♂️
// Ie. Client has lost connection to server, if internet is gone or server shut down etc. // Ie. Client has lost connection to server, if internet is gone or server shut down etc.
fn handle_renet_error(mut renet_error: EventReader<RenetError>) { // fn handle_renet_error(mut renet_error: EventReader<RenetError>) {
for err in renet_error.iter() { // for err in renet_error.iter() {
panic!("{}", err); // panic!("{}", err);
} // }
} // }

View file

@ -74,11 +74,11 @@
}, },
"nixpkgs": { "nixpkgs": {
"locked": { "locked": {
"lastModified": 1698336494, "lastModified": 1698553279,
"narHash": "sha256-sO72WDBKyijYD1GcKPlGsycKbMBiTJMBCnmOxLAs880=", "narHash": "sha256-T/9P8yBSLcqo/v+FTOBK+0rjzjPMctVymZydbvR/Fak=",
"owner": "NixOS", "owner": "NixOS",
"repo": "nixpkgs", "repo": "nixpkgs",
"rev": "808c0d8c53c7ae50f82aca8e7df263225cf235bf", "rev": "90e85bc7c1a6fc0760a94ace129d3a1c61c3d035",
"type": "github" "type": "github"
}, },
"original": { "original": {