diff --git a/server/src/lib.rs b/server/src/lib.rs index d90ed25531..ac3ab560ab 100644 --- a/server/src/lib.rs +++ b/server/src/lib.rs @@ -490,19 +490,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::(&self.state.ecs()); - run_now::(&self.state.ecs()); - run_now::(&self.state.ecs()); - run_now::(&self.state.ecs()); - run_now::(&self.state.ecs()); - run_now::(&self.state.ecs()); - run_now::(&self.state.ecs()); - let before_state_tick = Instant::now(); // 4) Tick the server's LocalState. @@ -511,6 +498,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); @@ -698,7 +686,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"]) diff --git a/server/src/sys/mod.rs b/server/src/sys/mod.rs index a97adf84eb..4457f5b741 100644 --- a/server/src/sys/mod.rs +++ b/server/src/sys/mod.rs @@ -21,6 +21,7 @@ use std::{ pub type PersistenceScheduler = SysScheduler; pub fn add_server_systems(dispatch_builder: &mut DispatcherBuilder) { + dispatch::(dispatch_builder, &[]); dispatch::(dispatch_builder, &[]); dispatch::(dispatch_builder, &[]); dispatch::(dispatch_builder, &[]); diff --git a/server/src/sys/msg/mod.rs b/server/src/sys/msg/mod.rs index 7967acf8a0..b074d246cf 100644 --- a/server/src/sys/msg/mod.rs +++ b/server/src/sys/msg/mod.rs @@ -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::(dispatch_builder, &[]); + dispatch::(dispatch_builder, &[]); + dispatch::(dispatch_builder, &[]); + dispatch::(dispatch_builder, &[]); + dispatch::(dispatch_builder, &[]); + dispatch::(dispatch_builder, &[]); +} /// handles all send msg and calls a handle fn /// Aborts when a error occurred returns cnt of successful msg otherwise diff --git a/server/src/sys/msg/terrain.rs b/server/src/sys/msg/terrain.rs index 3f5ddffe13..abac7af6d0 100644 --- a/server/src/sys/msg/terrain.rs +++ b/server/src/sys/msg/terrain.rs @@ -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;