ReplayPacer (MsgListener+MsgTalker) sits between packetizer output and
downstream listeners; sleeps after each complete NMEA/UBX frame before
forwarding. FileBackend no longer owns the delay — it reads as fast as
possible and the pacer provides back-pressure on the same thread.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- msg/frame_logger.py: MsgListener that writes raw byte stream per
source to timestamped log files (<YYYY_MM_DD_HH_MM_SS_source>.log)
- main.py: entry point extracted from network_backend.py; adds
--log-dir argument (default ./log) and wires FrameLogger per transceiver
- network_backend.py: now contains only the NetworkBackend class
- .gitignore: exclude log/ directory
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>