summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Notify/Event.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/orbsvcs/orbsvcs/Notify/Event.cpp')
-rw-r--r--TAO/orbsvcs/orbsvcs/Notify/Event.cpp47
1 files changed, 42 insertions, 5 deletions
diff --git a/TAO/orbsvcs/orbsvcs/Notify/Event.cpp b/TAO/orbsvcs/orbsvcs/Notify/Event.cpp
index b731ccf5f4d..c2da7349d99 100644
--- a/TAO/orbsvcs/orbsvcs/Notify/Event.cpp
+++ b/TAO/orbsvcs/orbsvcs/Notify/Event.cpp
@@ -6,16 +6,22 @@
#include "Event.inl"
#endif /* __ACE_INLINE__ */
-ACE_RCSID (Notify,
- TAO_Notify_Event,
+ACE_RCSID (Notify,
+ TAO_Notify_Event,
"$Id$")
#include "tao/debug.h"
+#include "tao/CDR.h"
#include "orbsvcs/CosNotificationC.h"
+// NOTE: unfortunately we must know about derived types to implement unmarshal
+#include "Any/AnyEvent.h"
+#include "Structured/StructuredEvent.h"
TAO_Notify_Event::TAO_Notify_Event (void)
:priority_ (CosNotification::Priority, CosNotification::DefaultPriority),
- timeout_ (CosNotification::Timeout)
+ timeout_ (CosNotification::Timeout),
+ reliable_ (CosNotification::EventReliability, false),
+ event_on_heap_ (0)
{
// if (TAO_debug_level > 0)
// ACE_DEBUG ((LM_DEBUG,"event:%x created\n", this ));
@@ -26,6 +32,11 @@ TAO_Notify_Event::~TAO_Notify_Event ()
// if (TAO_debug_level > 1)
// ACE_DEBUG ((LM_DEBUG,"event:%x destroyed\n", this ));
}
+void
+TAO_Notify_Event::release (void)
+{
+ delete this;
+}
void
TAO_Notify_Event::translate (const CORBA::Any& any, CosNotification::StructuredEvent& notification)
@@ -40,11 +51,37 @@ TAO_Notify_Event::translate (const CosNotification::StructuredEvent& notificatio
{
any <<= notification; // is the typecode set by this operation or do we need to set it explicity.
}
+/// Unmarshal an event from a CDR. (for persistence)
+//static
+TAO_Notify_Event *
+TAO_Notify_Event::unmarshal (TAO_InputCDR & cdr)
+{
+ TAO_Notify_Event * result = 0;
+ ACE_CDR::Octet code = 0;
+ if (cdr.read_octet (code))
+ {
+ switch (code)
+ {
+ case MARSHAL_ANY:
+ result = TAO_Notify_AnyEvent::unmarshal (cdr);
+ break;
+ case MARSHAL_STRUCTURED:
+ result = TAO_Notify_StructuredEvent::unmarshal (cdr);
+ break;
+ default:
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("(%P|%t) TAO_Notify_Event::unmarshal: unknown event code %d\n"),
+ code));
+ break;
+ }
+ }
+ return result;
+}
#if defined (ACE_HAS_EXPLICIT_TEMPLATE_INSTANTIATION)
template class ACE_Auto_Basic_Ptr<TAO_Notify_Event>;
-template class ACE_Refcounted_Auto_Ptr<const TAO_Notify_Event, TAO_SYNCH_MUTEX>;
+template class TAO_Notify_Refcountable_Guard_T<TAO_Notify_Event>;
template class ACE_Unbounded_Queue<TAO_Notify_Event_var>;
template class ACE_Node<TAO_Notify_Event_var>;
template class ACE_Unbounded_Queue_Iterator<TAO_Notify_Event_var>;
@@ -52,7 +89,7 @@ template class ACE_Unbounded_Queue_Iterator<TAO_Notify_Event_var>;
#elif defined (ACE_HAS_TEMPLATE_INSTANTIATION_PRAGMA)
#pragma instantiate ACE_Auto_Basic_Ptr<TAO_Notify_Event>
-#pragma instantiate ACE_Refcounted_Auto_Ptr<const TAO_Notify_Event, TAO_SYNCH_MUTEX>
+#pragma instantiate TAO_Notify_Refcountable_Guard_T<TAO_Notify_Event>;
#pragma instantiate ACE_Unbounded_Queue<TAO_Notify_Event_var>
#pragma instantiate ACE_Node<TAO_Notify_Event_var>
#pragma instantiate ACE_Unbounded_Queue_Iterator<TAO_Notify_Event_var>