cfx_server/
lib.rs

1use serde::Serialize;
2
3pub mod natives;
4
5pub mod events {
6    use cfx_core::events::Event;
7    use cfx_core::ref_funcs::ExternRefFunction;
8    use futures::Stream;
9    use serde::{Deserialize, Serialize};
10
11    #[derive(Debug, Serialize, Deserialize)]
12    pub struct Deferrals {
13        pub defer: ExternRefFunction,
14        pub done: ExternRefFunction,
15        pub handover: ExternRefFunction,
16        #[serde(rename = "presentCard")]
17        pub present_card: ExternRefFunction,
18        pub update: ExternRefFunction,
19    }
20
21    #[derive(Debug, Serialize, Deserialize)]
22    pub struct PlayerConnecting {
23        pub player_name: String,
24        pub set_kick_reason: ExternRefFunction,
25        pub deferrals: Deferrals,
26        // source: String,
27    }
28
29    pub fn player_connecting<'a>() -> impl Stream<Item = Event<'a, PlayerConnecting>> {
30        cfx_core::events::subscribe("playerConnecting", cfx_core::events::EventScope::Local)
31    }
32}
33
34pub fn emit_net<T: Serialize>(event_name: &str, source: &str, payload: T) {
35    if let Ok(payload) = rmp_serde::to_vec(&payload) {
36        natives::cfx::trigger_client_event_internal(
37            event_name,
38            source,
39            payload.as_slice(),
40            payload.len() as _,
41        );
42    }
43}