RSSI Protocol Server
For RSSI links where Rogue should wait for the remote side and run the server
side of the handshake, Rogue provides rogue::protocols::rssi::Server.
This is the lower-level server bundle used underneath wrappers such as
pyrogue.protocols.UdpRssiPack when that wrapper runs in server mode.
Server bundles and wires:
Transporton the lower link sideApplicationon the upper payload sideControllerfor handshake, negotiation, retransmission, and state control
Construction
Server(segSize) is shaped primarily by segSize, the initial local
maximum segment size in bytes. As with the client side, this is typically
derived from the lower transport payload budget.
Use transport() to connect the lower transport and application() to
connect upper protocol blocks.
Lifecycle And Runtime Controls
The server bundle exposes the same RSSI control surface as the client bundle:
start()/ Python_start()Start or restart connection establishment.stop()/ Python_stop()Stop the link.getOpen()Report whether the link is open.Local parameter setters such as
setLocMaxSegment()andsetLocRetranTout()Control the requested server-side link parameters.Negotiated-parameter getters such as
curMaxSegment()Report the active values after negotiation.
The controller owns the actual protocol-state machine. Server is the
convenience wrapper that surfaces that state and the associated tuning APIs.
Threading And Lifecycle
Serveris 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.Server(0, True)
rssi = rogue.protocols.rssi.Server(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.Server(0, True)
rssi = rogue.protocols.rssi.Server(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/Server.h>
namespace rpr = rogue::protocols::rssi;
auto rssi = rpr::Server::create(segSize);
lower_link == rssi->transport();
rssi->application() == upper_layer;
rssi->start();