New mesh_node.rs providing a production-ready node: - MeshNodeBuilder for fluent configuration - MeshConfig integration for all settings - MeshMetrics tracking for all operations - Rate limiting on incoming messages - Backpressure controller - Graceful shutdown via ShutdownCoordinator - Optional FappRouter based on capabilities - MeshRouter for envelope routing - TransportManager for multi-transport support Key APIs: - MeshNodeBuilder::new().fapp_relay().build() - node.process_incoming() with rate limiting + metrics - node.gc() for store/routing table cleanup - node.shutdown() for graceful termination 222 tests passing (203 lib + 3 fapp_flow + 16 multi_node)
90 lines
3.2 KiB
Rust
90 lines
3.2 KiB
Rust
//! Multi-Service Demo
|
|
//!
|
|
//! Shows how multiple services can run on the same mesh router.
|
|
|
|
use meshservice::{
|
|
capabilities,
|
|
identity::ServiceIdentity,
|
|
router::ServiceRouter,
|
|
service_ids,
|
|
services::{
|
|
fapp::{create_announce as fapp_announce, FappService, Modality, SlotAnnounce, Specialism},
|
|
housing::{
|
|
amenities, create_announce as housing_announce, HousingService, ListingAnnounce,
|
|
ListingType,
|
|
},
|
|
},
|
|
verification::{TrustedVerifiers, Verification, VerificationLevel},
|
|
};
|
|
|
|
fn main() {
|
|
println!("=== Multi-Service Mesh Demo ===\n");
|
|
|
|
// Create a router that handles both FAPP and Housing
|
|
let mut router = ServiceRouter::new(capabilities::RELAY | capabilities::CONSUMER);
|
|
router.register(Box::new(FappService::relay()));
|
|
router.register(Box::new(HousingService::relay()));
|
|
|
|
println!("Registered services:");
|
|
for (id, name) in router.services() {
|
|
println!(" 0x{:04x} - {}", id, name);
|
|
}
|
|
println!();
|
|
|
|
// Create identities
|
|
let therapist = ServiceIdentity::generate();
|
|
let landlord = ServiceIdentity::generate();
|
|
let registry = ServiceIdentity::generate();
|
|
|
|
// Setup trusted verifiers
|
|
let mut verifiers = TrustedVerifiers::new();
|
|
verifiers.add(
|
|
registry.public_key(),
|
|
"Health Registry",
|
|
VerificationLevel::RegistryVerified,
|
|
);
|
|
router.set_trusted_verifiers(verifiers);
|
|
|
|
// Therapist announcement with verification
|
|
println!("--- Adding FAPP announcement ---");
|
|
let fapp_data = SlotAnnounce::new(&[Specialism::Psychoanalysis], Modality::InPerson, "104")
|
|
.with_profile("https://kbv.de/therapists/12345");
|
|
|
|
let mut fapp_msg = fapp_announce(&therapist, &fapp_data, 1).unwrap();
|
|
|
|
// Registry verifies therapist
|
|
let verification = Verification::registry(
|
|
®istry,
|
|
&therapist.address(),
|
|
"licensed_therapist",
|
|
"KBV-12345",
|
|
);
|
|
fapp_msg.add_verification(verification);
|
|
|
|
router.handle(fapp_msg, Some(therapist.public_key())).unwrap();
|
|
println!("FAPP announcement stored (with registry verification)\n");
|
|
|
|
// Housing announcement
|
|
println!("--- Adding Housing announcement ---");
|
|
let housing_data = ListingAnnounce::new(ListingType::Studio, 35, 700, "104")
|
|
.with_amenities(amenities::FURNISHED | amenities::INTERNET)
|
|
.with_title("Cozy studio near therapist offices");
|
|
|
|
let housing_msg = housing_announce(&landlord, &housing_data, 1).unwrap();
|
|
router.handle(housing_msg, Some(landlord.public_key())).unwrap();
|
|
println!("Housing announcement stored\n");
|
|
|
|
// Summary
|
|
println!("--- Store Summary ---");
|
|
println!("FAPP messages: {}", router.store().service_count(service_ids::FAPP));
|
|
println!("Housing messages: {}", router.store().service_count(service_ids::HOUSING));
|
|
println!("Total messages: {}", router.store().len());
|
|
|
|
println!("\n=== Multi-Service Demo Complete ===");
|
|
println!("\nThe mesh can route and store messages for multiple services");
|
|
println!("using a single router instance. Each service has its own:");
|
|
println!(" - Payload format");
|
|
println!(" - Query matching logic");
|
|
println!(" - Handler implementation");
|
|
}
|