SafeCommLink - the RBC_Test_CommServer-facing client link for a sim (train).
This is the Python client side of the safe-communication path introduced
with the C ``Platform_Protocol_SafeComm`` / ``RBC_Test_CommServer`` product:
TrainSim --(this module, plain TCP)--> RBC_Test_CommServer --> RBC role-C gateway
RBC_Test_CommServer owns the WEST/EAST dual-homing, so from the sim's point of view
there is a single logical link. It is a drop-in alternative to
``simcore.dual_link.DualHomedLink`` - same ``ensure_connected()`` /
``send_all()`` / ``poll_recv()`` surface - selected by ``train_sim`` when
the config carries a ``commServer`` block.
This link itself is a transparent byte pipe with fixed ``message_size``
framing, as RBC_Test_CommServer is a non-vital carrier. Safety protection of
the ERTMS traffic (Subset-037 SaF, terminated in RBC_GP's A/B processes) is
layered on top by ``simcore.saf_train_link.SafTrainLink``, which wraps this
link or ``DualHomedLink`` alike (``train_sim`` does so when
``RTE_SAFECOMM_TRAIN_RBC_ID`` is set).