mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'xMAC94x/server_parallize' into 'master'
handle msg as part of the servers state for best parallelisation. also include agent there See merge request veloren/veloren!1878
This commit is contained in:
commit
5d32690fbf
@ -495,19 +495,6 @@ impl Server {
|
||||
// 3) Handle inputs from clients
|
||||
self.handle_new_connections(&mut frontend_events);
|
||||
|
||||
let before_message_system = Instant::now();
|
||||
|
||||
// Run message receiving sys before the systems in common for decreased latency
|
||||
// (e.g. run before controller system)
|
||||
//TODO: run in parallel
|
||||
run_now::<sys::msg::general::Sys>(&self.state.ecs());
|
||||
run_now::<sys::msg::register::Sys>(&self.state.ecs());
|
||||
run_now::<sys::msg::character_screen::Sys>(&self.state.ecs());
|
||||
run_now::<sys::msg::in_game::Sys>(&self.state.ecs());
|
||||
run_now::<sys::msg::terrain::Sys>(&self.state.ecs());
|
||||
run_now::<sys::msg::ping::Sys>(&self.state.ecs());
|
||||
run_now::<sys::agent::Sys>(&self.state.ecs());
|
||||
|
||||
let before_state_tick = Instant::now();
|
||||
|
||||
// 4) Tick the server's LocalState.
|
||||
@ -516,6 +503,7 @@ impl Server {
|
||||
self.state.tick(
|
||||
dt,
|
||||
|dispatcher_builder| {
|
||||
sys::msg::add_server_systems(dispatcher_builder);
|
||||
sys::add_server_systems(dispatcher_builder);
|
||||
#[cfg(feature = "worldgen")]
|
||||
rtsim::add_server_systems(dispatcher_builder);
|
||||
@ -703,7 +691,7 @@ impl Server {
|
||||
|
||||
let tt = &tick_metrics.tick_time;
|
||||
tt.with_label_values(&["new connections"])
|
||||
.set((before_message_system - before_new_connections).as_nanos() as i64);
|
||||
.set((before_state_tick - before_new_connections).as_nanos() as i64);
|
||||
tt.with_label_values(&["handle server events"])
|
||||
.set((before_update_terrain_and_regions - before_handle_events).as_nanos() as i64);
|
||||
tt.with_label_values(&["update terrain and region map"])
|
||||
|
@ -21,6 +21,7 @@ use std::{
|
||||
pub type PersistenceScheduler = SysScheduler<persistence::Sys>;
|
||||
|
||||
pub fn add_server_systems(dispatch_builder: &mut DispatcherBuilder) {
|
||||
dispatch::<agent::Sys>(dispatch_builder, &[]);
|
||||
dispatch::<terrain::Sys>(dispatch_builder, &[]);
|
||||
dispatch::<waypoint::Sys>(dispatch_builder, &[]);
|
||||
dispatch::<invite_timeout::Sys>(dispatch_builder, &[]);
|
||||
|
@ -6,7 +6,18 @@ pub mod register;
|
||||
pub mod terrain;
|
||||
|
||||
use crate::client::Client;
|
||||
use common_ecs::dispatch;
|
||||
use serde::de::DeserializeOwned;
|
||||
use specs::DispatcherBuilder;
|
||||
|
||||
pub fn add_server_systems(dispatch_builder: &mut DispatcherBuilder) {
|
||||
dispatch::<character_screen::Sys>(dispatch_builder, &[]);
|
||||
dispatch::<general::Sys>(dispatch_builder, &[]);
|
||||
dispatch::<in_game::Sys>(dispatch_builder, &[]);
|
||||
dispatch::<ping::Sys>(dispatch_builder, &[]);
|
||||
dispatch::<register::Sys>(dispatch_builder, &[]);
|
||||
dispatch::<terrain::Sys>(dispatch_builder, &[]);
|
||||
}
|
||||
|
||||
/// handles all send msg and calls a handle fn
|
||||
/// Aborts when a error occurred returns cnt of successful msg otherwise
|
||||
|
@ -25,7 +25,7 @@ impl<'a> System<'a> for Sys {
|
||||
ReadStorage<'a, Client>,
|
||||
);
|
||||
|
||||
const NAME: &'static str = "msg::in_game";
|
||||
const NAME: &'static str = "msg::terrain";
|
||||
const ORIGIN: Origin = Origin::Server;
|
||||
const PHASE: Phase = Phase::Create;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user