diff options
Diffstat (limited to 'protocols/ace/RMCast/RMCast_Retransmission.cpp')
-rw-r--r-- | protocols/ace/RMCast/RMCast_Retransmission.cpp | 85 |
1 files changed, 14 insertions, 71 deletions
diff --git a/protocols/ace/RMCast/RMCast_Retransmission.cpp b/protocols/ace/RMCast/RMCast_Retransmission.cpp index a23829cd54e..7b626a4ef7d 100644 --- a/protocols/ace/RMCast/RMCast_Retransmission.cpp +++ b/protocols/ace/RMCast/RMCast_Retransmission.cpp @@ -4,6 +4,8 @@ #include "RMCast_Retransmission.h" #include "RMCast_Proxy.h" +#include "RMCast_Ack_Worker.h" +#include "RMCast_Resend_Worker.h" #include "ace/Message_Block.h" #if !defined (__ACE_INLINE__) @@ -16,42 +18,6 @@ ACE_RMCast_Retransmission::~ACE_RMCast_Retransmission (void) { } -class ACE_RMCast_Resend_Worker - : public ACE_RMCast_Worker<ACE_UINT32,ACE_RMCast::Data> -{ -public: - ACE_RMCast_Resend_Worker (ACE_RMCast_Module *next, - ACE_UINT32 max_sequence_number) - : n (0) - , next_ (next) - , max_sequence_number_ (max_sequence_number) - { - } - - int work (ACE_UINT32 const & key, - ACE_RMCast::Data const & item) - { - if (key > this->max_sequence_number_) - return 0; - // ACE_DEBUG ((LM_DEBUG, - // " Retransmission::resend - message %d resent\n", - // key)); - ACE_RMCast::Data data = item; - int r = this->next_->data (data); - if (r != 0) - return r; - n++; - return 0; - } - - int n; - -private: - ACE_RMCast_Module *next_; - - ACE_UINT32 max_sequence_number_; -}; - int ACE_RMCast_Retransmission::resend (ACE_UINT32 max_sequence_number) { @@ -126,42 +92,19 @@ ACE_RMCast_Retransmission::join (ACE_RMCast::Join &join) return 0; } -class ACE_RMCast_Ack_Worker - : public ACE_RMCast_Worker<ACE_UINT32,ACE_RMCast::Data> +int +ACE_RMCast_Retransmission::leave (ACE_RMCast::Leave &leave) { -public: - ACE_RMCast_Ack_Worker (ACE_RMCast::Ack &ack, - ACE_RMCast_Retransmission::Messages::Write_Guard &g, - ACE_RMCast_Retransmission::Messages *messages) - : ack_ (ack) - , ace_mon_ (g) - , messages_ (messages) - { - } - - int work (ACE_UINT32 const & key, - ACE_RMCast::Data const &item) - { - if (key >= this->ack_.next_expected) - return 0; - // ACE_DEBUG ((LM_DEBUG, - // " Retransmission::ack - message %d erased\n", - // key)); - ACE_Message_Block::release (item.payload); - return this->messages_->unbind_i (this->ace_mon_, key); - } - -private: - ACE_RMCast_Ack_Worker (const ACE_RMCast_Ack_Worker&); - ACE_RMCast_Ack_Worker& operator= (const ACE_RMCast_Ack_Worker&); - -private: - ACE_RMCast::Ack &ack_; - - ACE_RMCast_Retransmission::Messages::Write_Guard &ace_mon_; - - ACE_RMCast_Retransmission::Messages *messages_; -}; + if (leave.source == 0) + return 0; + + ACE_RMCast::Ack_Leave ack_leave; + ack_leave.source = 0; + + (void) leave.source->reply_ack_leave (ack_leave); + + return 0; +} int ACE_RMCast_Retransmission::ack (ACE_RMCast::Ack &ack) |