replay: delay per complete frame instead of per chunk

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>
This commit is contained in:
2026-05-25 13:11:40 +02:00
co-authored by Claude Sonnet 4.6
parent ff686b64f7
commit dce570460e
4 changed files with 58 additions and 26 deletions
+22
View File
@@ -0,0 +1,22 @@
import time
from msg.listener import MsgListener
from msg.talker import MsgTalker
from msg.container import MsgContainer
class ReplayPacer(MsgListener, MsgTalker):
"""Sits between a packetizer and its listeners; sleeps after each
complete frame so file replay runs at a controlled rate."""
def __init__(self, delay: float = 1.0):
MsgListener.__init__(self)
MsgTalker.__init__(self)
self.delay = delay
def is_msg(self, msg: MsgContainer) -> bool:
return True
def on_recv(self, msg: MsgContainer):
if self.delay > 0:
time.sleep(self.delay)
self.call_listener(msg)