init
This commit is contained in:
commit
f978b8af17
21 changed files with 4015 additions and 0 deletions
55
src/lib_server/net.rs
Normal file
55
src/lib_server/net.rs
Normal file
|
@ -0,0 +1,55 @@
|
|||
use bevy::{
|
||||
prelude::*,
|
||||
tasks::{TaskPool, TaskPoolBuilder},
|
||||
};
|
||||
use bevy_eventwork::{
|
||||
tcp::{NetworkSettings, TcpProvider},
|
||||
EventworkPlugin, EventworkRuntime, Network, NetworkEvent,
|
||||
};
|
||||
|
||||
use crate::lib_server::player::{remove_player, spawn_player};
|
||||
|
||||
use super::{display::RenderUpdate, player::Player};
|
||||
|
||||
pub struct NetPlugin;
|
||||
|
||||
impl Plugin for NetPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.add_plugins(EventworkPlugin::<TcpProvider, TaskPool>::default())
|
||||
.insert_resource(EventworkRuntime(TaskPoolBuilder::new().num_threads(2).build()))
|
||||
.insert_resource(NetworkSettings::default())
|
||||
.add_systems(Update, handle_net_event)
|
||||
.add_systems(Startup, do_listen);
|
||||
}
|
||||
}
|
||||
|
||||
fn handle_net_event(
|
||||
mut cmd: Commands,
|
||||
mut events: EventReader<NetworkEvent>,
|
||||
mut render_update: EventWriter<RenderUpdate>,
|
||||
players: Query<(Entity, &Player)>,
|
||||
) {
|
||||
for event in events.read() {
|
||||
match event {
|
||||
NetworkEvent::Connected(conn_id) => {
|
||||
println!("New connection, {conn_id:?}.");
|
||||
spawn_player(&mut cmd, *conn_id, IVec2::ZERO);
|
||||
render_update.send(RenderUpdate(IVec2::ZERO));
|
||||
}
|
||||
NetworkEvent::Disconnected(conn_id) => {
|
||||
println!("Lost connection, {conn_id:?}.");
|
||||
remove_player(&mut cmd, *conn_id, &players);
|
||||
}
|
||||
NetworkEvent::Error(network_error) => println!("Network failure '{network_error}'."),
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn do_listen(
|
||||
mut net: ResMut<Network<TcpProvider>>,
|
||||
settings: Res<NetworkSettings>,
|
||||
task_pool: Res<EventworkRuntime<TaskPool>>,
|
||||
) {
|
||||
net.listen(([0, 0, 0, 0], 9000).into(), &task_pool.0, &settings)
|
||||
.unwrap();
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue