1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// SPDX-License-Identifier: Apache-2.0
// Copyright 2026 ZeroDDS Contributors
//! `zerodds-ws-bridged` Daemon-Implementation.
//!
//! Spec: `docs/specs/zerodds-ws-bridge-1.0.md`.
//!
//! Conformance-Levels L1-L4 werden hier voll bedient:
//!
//! * **L1 — Wire**: HTTP-Upgrade-Handshake gemaess RFC 6455 §4 ueber das
//! `crate::handshake`-Modul; Frame-Codec ueber `crate::codec`.
//! * **L2 — DDS**: jeder Daemon-Prozess startet einen `DcpsRuntime` mit
//! `RuntimeConfig::default()` auf der konfigurierten Domain-ID.
//! * **L3 — Bridging**: pro `topics[]`-Eintrag ein Reader+Writer; WS-
//! Frames `op:publish` schreiben in den Writer, DDS-Samples werden
//! als `op:notify` an alle subskribierten WS-Clients gepusht.
//! * **L4 — Config**: YAML-Subset-Parser ohne externe deps (siehe
//! [`config`]).
//!
//! L5 (Auth/TLS) und L6 (Multi-Tenant) sind als Stubs angelegt — der
//! Wire-Pfad ist L1-vollstaendig, L5/L6-Wireup wird in einem Folge-
//! Sprint nachgezogen.
//!
//! # Architektur
//!
//! Sync-Threads, blockierendes I/O. Pro WS-Connection ein Reader-
//! Thread + ein Writer-Thread (DDS-Pump → Connection-Queue). Keine
//! tokio-Abhaengigkeit — der Workspace ist sync.
//!
//! ```text
//! +--------------------+
//! | TCP-Listener |
//! +---------+----------+
//! |
//! v
//! +----------------- Connection -----------------+
//! | read-thread ← WS-Frame-Decoder |
//! | │ |
//! | └─→ DDS-Writer (write_user_sample) |
//! | |
//! | write-thread ← DDS-Reader rx-channel |
//! | │ |
//! | └─→ WS-Frame-Encoder ─→ TCP-Stream |
//! +----------------------------------------------+
//! ```