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>
22 lines
648 B
Python
22 lines
648 B
Python
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) |