citadel_sdk/prefabs/server/empty.rs
1//! Minimal Network Kernel
2//!
3//! This module provides a minimal network kernel implementation that performs no
4//! additional processing on network events. It's useful for servers that need to
5//! accept connections but don't require custom event handling.
6//!
7//! # Features
8//! - Zero overhead processing
9//! - Automatic event acceptance
10//! - Minimal resource usage
11//! - No state management
12//! - Simple implementation
13//!
14//! # Example:
15//! ```rust
16//! use citadel_sdk::prelude::*;
17//! use citadel_sdk::prefabs::server::empty::EmptyKernel;
18//!
19//! # fn main() -> Result<(), NetworkError> {
20//! let kernel = Box::new(EmptyKernel::<StackedRatchet>::default());
21//! # Ok(())
22//! # }
23//! ```
24//!
25//! # Important Notes
26//! - No event processing
27//! - No connection handling
28//! - No channel interaction
29//! - Suitable for basic servers
30//! - Not suitable for interactive servers
31//!
32//! # Related Components
33//! - [`NetKernel`]: Base trait for network kernels
34//! - [`NodeRemote`]: Server remote interface
35//! - [`NodeResult`]: Network event handling
36//!
37//! [`NetKernel`]: crate::prelude::NetKernel
38//! [`NodeRemote`]: crate::prelude::NodeRemote
39//! [`NodeResult`]: crate::prelude::NodeResult
40
41use citadel_proto::prelude::*;
42use std::marker::PhantomData;
43
44/// A kernel that does nothing to events in the protocol, nor does it cause any requests. A server that allows any and all connections with no special handlers would benefit from the use of this kernel.
45/// This should never be used for interacting with peers/clients from the server, since to do so would deny the possibility of interacting with channels.
46pub struct EmptyKernel<R: Ratchet>(PhantomData<R>);
47
48impl<R: Ratchet> Default for EmptyKernel<R> {
49 fn default() -> Self {
50 Self(Default::default())
51 }
52}
53
54#[async_trait]
55impl<R: Ratchet> NetKernel<R> for EmptyKernel<R> {
56 fn load_remote(&mut self, _server_remote: NodeRemote<R>) -> Result<(), NetworkError> {
57 Ok(())
58 }
59
60 async fn on_start(&self) -> Result<(), NetworkError> {
61 Ok(())
62 }
63
64 async fn on_node_event_received(&self, _message: NodeResult<R>) -> Result<(), NetworkError> {
65 Ok(())
66 }
67
68 async fn on_stop(&mut self) -> Result<(), NetworkError> {
69 Ok(())
70 }
71}