citadel_sdk/prefabs/server/mod.rs
1//! Server-Side Network Components
2//!
3//! This module provides pre-built server-side networking components for the Citadel Protocol.
4//! It includes implementations for common server tasks such as file transfer handling,
5//! client connection management, and internal service integration.
6//!
7//! # Features
8//! - File transfer acceptance
9//! - Client connection handling
10//! - Internal service support
11//! - Minimal processing kernels
12//! - Event-driven architecture
13//! - Automatic resource management
14//! - Service integration patterns
15//!
16//! # Example
17//! ```rust
18//! use citadel_sdk::prelude::*;
19//! use citadel_sdk::prefabs::server::accept_file_transfer_kernel::AcceptFileTransferKernel;
20//! use citadel_sdk::prefabs::server::client_connect_listener::ClientConnectListenerKernel;
21//! use citadel_sdk::prefabs::server::empty::EmptyKernel;
22//! use citadel_sdk::prefabs::server::internal_service::InternalServiceKernel;
23//! use citadel_io::tokio;
24//! use bytes::Bytes;
25//! use http_body_util::Full;
26//! use hyper::body::Incoming;
27//! use hyper::service::service_fn;
28//! use hyper::{Request, Response};
29//! use std::convert::Infallible;
30//!
31//! # fn main() -> Result<(), NetworkError> {
32//! // Create a basic server with file transfer support
33//! let kernel = Box::new(AcceptFileTransferKernel::<StackedRatchet>::default());
34//!
35//! // Create a server that listens for client connections
36//! let kernel = Box::new(ClientConnectListenerKernel::<_, _, StackedRatchet>::new(|conn| async move {
37//! println!("Client connected!");
38//! Ok(())
39//! }));
40//!
41//! // Create a minimal server with no additional processing
42//! let kernel = Box::new(EmptyKernel::<StackedRatchet>::default());
43//!
44//! // Create a server with internal service support (e.g., HTTP server)
45//! let kernel = Box::new(InternalServiceKernel::<_, _, StackedRatchet>::new(|_comm| async move {
46//! let service = service_fn(|_req: Request<Incoming>| async move {
47//! Ok::<_, Infallible>(Response::new(Full::new(Bytes::new())))
48//! });
49//! Ok(())
50//! }));
51//! # Ok(())
52//! # }
53//! ```
54//!
55//! # Important Notes
56//! - Kernels are composable components
57//! - Each kernel serves a specific purpose
58//! - Resource cleanup is automatic
59//! - Event handling is asynchronous
60//!
61//! # Related Components
62//! - [`accept_file_transfer_kernel`]: File transfer handling
63//! - [`client_connect_listener`]: Client connection management
64//! - [`internal_service`]: Internal service support
65//! - [`empty`]: Minimal processing kernel
66//!
67//! [`accept_file_transfer_kernel`]: crate::prefabs::server::accept_file_transfer_kernel
68//! [`client_connect_listener`]: crate::prefabs::server::client_connect_listener
69//! [`internal_service`]: crate::prefabs::server::internal_service
70//! [`empty`]: crate::prefabs::server::empty
71
72/// A kernel that accepts all inbound file transfer requests for basic file transfers
73/// AND RE-VFS transfers
74pub mod accept_file_transfer_kernel;
75/// A kernel that reacts to new channels created, allowing communication with new clients.
76/// Useful for when a server needs to send messages to clients
77pub mod client_connect_listener;
78/// A non-reactive kernel that does no additional processing on top of the protocol
79pub mod empty;
80/// For internal services (e.g., a Hyper webserver)
81pub mod internal_service;