summaryrefslogtreecommitdiff
path: root/ACE/TAO/orbsvcs/orbsvcs/Notify/Validate_Client_Task.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/TAO/orbsvcs/orbsvcs/Notify/Validate_Client_Task.cpp')
-rw-r--r--ACE/TAO/orbsvcs/orbsvcs/Notify/Validate_Client_Task.cpp88
1 files changed, 88 insertions, 0 deletions
diff --git a/ACE/TAO/orbsvcs/orbsvcs/Notify/Validate_Client_Task.cpp b/ACE/TAO/orbsvcs/orbsvcs/Notify/Validate_Client_Task.cpp
new file mode 100644
index 00000000000..5d76943f6cf
--- /dev/null
+++ b/ACE/TAO/orbsvcs/orbsvcs/Notify/Validate_Client_Task.cpp
@@ -0,0 +1,88 @@
+/* -*- C++ -*- $Id$ */
+#include "Validate_Client_Task.h"
+
+ACE_RCSID(Notify, Validate_Client_Task, "$Id$")
+
+#include "EventChannelFactory.h"
+#include "tao/ORB_Core.h"
+#include "tao/debug.h"
+#include "ace/Reactor.h"
+
+
+TAO_BEGIN_VERSIONED_NAMESPACE_DECL
+
+TAO_Notify_validate_client_Task::
+ TAO_Notify_validate_client_Task (const ACE_Time_Value &delay,
+ const ACE_Time_Value &interval,
+ TAO_Notify_EventChannelFactory *ecf)
+ : delay_ (delay),
+ interval_ (interval),
+ ecf_ (ecf),
+ shutdown_ (false)
+{
+ if (this->activate (THR_NEW_LWP | THR_JOINABLE, 1) == -1)
+ {
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT("(%P|%t)TAO_Notify_validate_client_Task: %p\n"),"activate"));
+ }
+}
+
+
+TAO_Notify_validate_client_Task::~TAO_Notify_validate_client_Task (void)
+{
+}
+
+
+int
+TAO_Notify_validate_client_Task::svc (void)
+{
+ ACE_Time_Value due = ACE_OS::gettimeofday () + this->delay_;
+ while (! this->shutdown_)
+ {
+ {
+ ACE_GUARD_RETURN (TAO_SYNCH_MUTEX, ace_mon, *(this->condition_.mutex()), -1);
+ this->condition_.wait (&due);
+ }
+
+ if (this->shutdown_)
+ break;
+
+ try
+ {
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%P|%t)%T TAO_Notify_validate_client_Task::svc validate start\n")));
+ }
+ this->ecf_->validate ();
+ if (TAO_debug_level > 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, ACE_TEXT ("%P|%t)%T TAO_Notify_validate_client_Task::svc validate end\n")));
+ }
+ }
+ catch (...)
+ {
+ // Ignore all exceptions
+ }
+
+ if (this->interval_ == ACE_Time_Value::zero)
+ break;
+
+ due = ACE_OS::gettimeofday () + this->interval_;
+ }
+
+ return 0;
+}
+
+
+void
+TAO_Notify_validate_client_Task::shutdown (void)
+{
+ {
+ ACE_GUARD (TAO_SYNCH_MUTEX, ace_mon, *(this->condition_.mutex()));
+ this->shutdown_ = true;
+ this->condition_.signal ();
+ }
+ this->wait ();
+}
+
+TAO_END_VERSIONED_NAMESPACE_DECL