summaryrefslogtreecommitdiff
path: root/protocols/ace/RMCast/RMCast_Retransmission.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'protocols/ace/RMCast/RMCast_Retransmission.cpp')
-rw-r--r--protocols/ace/RMCast/RMCast_Retransmission.cpp85
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)