The protocol starts when operation rmcast() is invoked on some
initiator object aRMCObject, passing it a message m and a
destination set destSet. In this operation, context
aRMCObject
first creates a strategy aRMCAlgo
, and then
invokes operation rmcast() on it, with the arguments it just
received. Strategy aRMCAlgo
builds message m,
containing both m and destSet. It then issues a reliable
point-to-point communication with each protocol object referenced in
destSet; in order to do this, strategy aRMCAlgo
relies on
inherited service rSend() of context aRMCObject
. When
message m reaches aRMCObject
, one of the target
objects, operation rDeliver() is triggered by the protocol.
Operation rDeliver() detects that m is a multicast message
and forwards it to aRMCAlgo
, the strategy in charge of that
particular execution of the reliable multicast protocol. When
aRMCAlgo
receives m for the first time, it re-issues a
reliable point-to-point communication with each protocol object referenced
in destSet (extracted from m), and then invokes
rmDeliver() on its context aRMCObject
, passing it message
m (also extracted from m). This retransmission scheme
is necessary because of the agreement property of the reliable
multicast primitive, which requires that either all correct objects in
destSet or none receive message m [2].