summaryrefslogtreecommitdiff
path: root/ace/RMCast/RMCast_Control_Splitter.h
diff options
context:
space:
mode:
Diffstat (limited to 'ace/RMCast/RMCast_Control_Splitter.h')
-rw-r--r--ace/RMCast/RMCast_Control_Splitter.h49
1 files changed, 49 insertions, 0 deletions
diff --git a/ace/RMCast/RMCast_Control_Splitter.h b/ace/RMCast/RMCast_Control_Splitter.h
new file mode 100644
index 00000000000..d1c0b5df3a0
--- /dev/null
+++ b/ace/RMCast/RMCast_Control_Splitter.h
@@ -0,0 +1,49 @@
+/* -*- C++ -*- */
+// $Id$
+
+#ifndef ACE_RMCAST_CONTROL_SPLITTER_H
+#define ACE_RMCAST_CONTROL_SPLITTER_H
+#include "ace/pre.h"
+
+#include "RMCast_Module.h"
+
+#if !defined (ACE_LACKS_PRAGMA_ONCE)
+# pragma once
+#endif /* ACE_LACKS_PRAGMA_ONCE */
+
+/// Split control and data messages different modules in the stack
+/**
+ * In some instances the control messages must go a destination
+ * different from the regular data flow. This class performs this
+ * separation.
+ */
+class ACE_RMCast_Export ACE_RMCast_Control_Splitter : public ACE_RMCast_Module
+{
+public:
+ //! Constructor
+ ACE_RMCast_Control_Splitter (void);
+
+ //! Destructor
+ virtual ~ACE_RMCast_Control_Splitter (void);
+
+ /// Set the control module, all incoming control messages go to it
+ void control_module (ACE_RMCast_Module *module);
+
+ /// Return the current control module
+ ACE_RMCast_Module *control_module (void) const;
+
+ virtual int ack (ACE_RMCast::Ack &);
+ virtual int join (ACE_RMCast::Join &);
+ virtual int leave (ACE_RMCast::Leave &);
+
+private:
+ /// The control module
+ ACE_RMCast_Module *control_module_;
+};
+
+#if defined (__ACE_INLINE__)
+#include "RMCast_Control_Splitter.i"
+#endif /* __ACE_INLINE__ */
+
+#include "ace/post.h"
+#endif /* ACE_RMCAST_CONTROL_SPLITTER_H */