veloren_server/sys/msg/
mod.rs1pub mod character_screen;
2pub mod general;
3pub mod gizmos;
4pub mod in_game;
5pub mod network_events;
6pub mod ping;
7pub mod register;
8pub mod terrain;
9
10use crate::{
11 client::Client,
12 sys::{loot, pets},
13};
14use common_ecs::{System, dispatch};
15use serde::de::DeserializeOwned;
16use specs::DispatcherBuilder;
17
18pub fn add_server_systems(dispatch_builder: &mut DispatcherBuilder) {
19 dispatch::<gizmos::Sys>(dispatch_builder, &[]);
22 dispatch::<character_screen::Sys>(dispatch_builder, &[]);
23 dispatch::<general::Sys>(dispatch_builder, &[]);
24 dispatch::<in_game::Sys>(dispatch_builder, &[]);
25 dispatch::<ping::Sys>(dispatch_builder, &[&general::Sys::sys_name()]);
26 dispatch::<register::Sys>(dispatch_builder, &[]);
27 dispatch::<terrain::Sys>(dispatch_builder, &[]);
28 dispatch::<pets::Sys>(dispatch_builder, &[]);
29 dispatch::<loot::Sys>(dispatch_builder, &[]);
30 dispatch::<network_events::Sys>(dispatch_builder, &[]);
31}
32
33pub(crate) fn try_recv_all<M, F>(
36 client: &mut Client,
37 stream_id: u8,
38 mut f: F,
39) -> Result<u64, crate::error::Error>
40where
41 M: DeserializeOwned,
42 F: FnMut(&Client, M) -> Result<(), crate::error::Error>,
43{
44 let mut cnt = 0u64;
45 loop {
46 let msg = match client.recv(stream_id) {
47 Ok(Some(msg)) => msg,
48 Ok(None) => break Ok(cnt),
49 Err(e) => break Err(e.into()),
50 };
51 if let Err(e) = f(client, msg) {
52 break Err(e);
53 }
54 cnt += 1;
55 }
56}