mirror of
https://github.com/pyMC-dev/pyMC_Repeater.git
synced 2026-07-27 12:03:08 +02:00
72e874f838
Build a core RegionMap from the node's served regions and wire it into the dispatcher and every companion bridge, so a flood reply is re-scoped to the region its request arrived under (or left plain for a wildcard / direct request) -- matching firmware simple_repeater::sendFloodReply. Previously replies went out plain, so a reply to a request in region B was dropped by B-only repeaters. The map is built once from the node-wide transport_keys table (each named region -> RegionEntry, flags=REGION_DENY_FLOOD for deny-flood regions; the '*' wildcard is deliberately not an entry so plain floods reply plain). A single shared instance reaches the dispatcher and all bridges. Public regions rely on name-hashing for their key; a stored key is carried only when it is genuinely custom material the name would not reproduce, keeping reply-matching aligned with the forwarding transport-code check. Region edits at runtime (CLI, web API, Glass sync) all funnel through the transport_keys CRUD methods, which now fire a post-commit change callback; the daemon rebuilds the map and reassigns a fresh instance to the dispatcher and every live bridge (atomic rebind, safe against an in-flight find_match on the RX thread). Requires openhop_core with Dispatcher.region_map / CompanionBridge.region_map.