feat(example)+docs: pvd_tool on the modern stack; chapter 42 teaches the daemon path
C9 — the flagship vendor example now demonstrates the intended integration
shape. examples/pvd_tool/main.cpp: 1093 -> 570 lines. The 466-line
hand-registered handler section and the hand-wired Server/Router/emit
plumbing are gone, replaced by EquipmentRuntime + register_default_handlers
(the example now serves all 56 handlers, up from its hand-picked 51) +
commands.set_handler for the START-runs-the-recipe behaviour (was a
hard-coded S2F41 router override). All domain logic — sensor simulator,
recipe runner, alarm threshold monitor, EPT cycler, Prometheus gauges —
unchanged. pvd's SVIDs 1/2 and CEIDs 400/401 match the roles: defaults, so
the built-ins bind with no config change. Verified: builds clean, boots
("registered 56 handlers", config loaded, EPT cycling), HSMS :5000 accepts,
metrics :9090 answers HTTP 200. logfn flushes per line so docker/CI logs
are visible immediately.
Writing project — new tutorial chapter docs/42_vendor_daemon_and_clients.md:
why a daemon (the host-timer argument), the proto contract and the HCACK-4
command semantics, the Python client walkthrough, EquipmentRuntime +
capability registration + roles:, the threading contract (posting API /
read_sync / hooks-on-io-thread) and primary-vs-observer slots, and a
which-tier-do-I-pick table. Indexed in 00_index Part 4. Refreshed the three
spots that still described pvd_tool's old "51 handlers in ~460 lines" shape
(ch35, ch41, pvd README) — drift killed in the same commit that made it.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
@@ -64,9 +64,11 @@ router->on(2, 41, [model](const auto& m) {
|
||||
// register_* functions; register_default_handlers(runtime) wires them all.
|
||||
```
|
||||
|
||||
The `examples/pvd_tool/main.cpp` §6 register 51 handlers in ~460
|
||||
lines. Each handler is a few lines: parse the body, mutate or read
|
||||
a store, build the reply.
|
||||
The `examples/pvd_tool/main.cpp` §6 gets all 56 with ONE call —
|
||||
`register_default_handlers(runtime)` — then adds tool behaviour via
|
||||
`commands.set_handler`. Inside the capability functions each handler is
|
||||
still a few lines: parse the body, mutate or read a store, build the
|
||||
reply.
|
||||
|
||||
### What happens for unhandled primaries
|
||||
|
||||
|
||||
Reference in New Issue
Block a user