RSSI Protocol Client
For RSSI links where Rogue should initiate and maintain the client side of the
connection, Rogue provides rogue::protocols::rssi::Client. This is the
lower-level RSSI bundle used underneath wrappers such as
pyrogue.protocols.UdpRssiPack.
Client bundles and wires:
Transporton the lower link sideApplicationon the upper payload sideControllerfor handshake, negotiation, retransmission, and state control
Construction
Client(segSize) is shaped primarily by segSize, the initial local
maximum segment size in bytes. In real deployments this is usually derived from
the lower transport payload budget, for example udp.maxPayload() - 8.
Use transport() to connect the lower transport and application() to
connect upper protocol blocks such as packetizer or SRP.
Lifecycle And Runtime Controls
The wrapper exposes the RSSI control surface directly:
start()/ Python_start()Start or restart connection establishment.stop()/ Python_stop()Stop the link.getOpen()Report whether the link is open.setLocMaxBuffers(),setLocMaxSegment(),setLocRetranTout(), and related methods Adjust local requested link parameters before or during operation.curMaxBuffers(),curMaxSegment(), and related methods Report the negotiated parameters actually in use.
The controller owns the actual protocol-state machine. Client is the
convenience wrapper that surfaces that state and the associated tuning APIs.
Threading And Lifecycle
Clientis a wrapper, not a separate transport thread owner.The internal
Controllerowns the RSSI protocol-state machine and link progression.The internal
Applicationendpoint starts a background worker thread once the controller is attached.The lower
Transportendpoint forwards received link frames directly into the controller.In Root-managed applications, register the RSSI objects with
Root.addInterface(...)so Managed Interface Lifecycle handles startup and shutdown.In standalone scripts, call
_start()and_stop()explicitly when noRootmanages the link.
Managed Interface Lifecycle reference: Example: Runtime Work In _start() And _stop()
Python Example
import rogue.protocols.udp
import rogue.protocols.rssi
udp = rogue.protocols.udp.Client("127.0.0.1", 8200, True)
rssi = rogue.protocols.rssi.Client(udp.maxPayload() - 8)
# Link-layer stream connection.
udp == rssi.transport()
# Upper-layer payload connection.
rssi.application() == app_transport
# Start controller state machine.
rssi._start()
Standalone script pattern:
udp = rogue.protocols.udp.Client("127.0.0.1", 8200, True)
rssi = rogue.protocols.rssi.Client(udp.maxPayload() - 8)
udp == rssi.transport()
rssi._start()
try:
rssi.application() == app_transport
# ... run application traffic ...
pass
finally:
rssi._stop()
udp._stop()
C++ Example
#include <rogue/protocols/rssi/Client.h>
namespace rpr = rogue::protocols::rssi;
auto rssi = rpr::Client::create(segSize);
lower_link == rssi->transport();
rssi->application() == upper_layer;
rssi->start();