• Classes
  • Modules
  • Namespaces
  • Files
  • Related Pages
  • File List
  • File Members

maciHeartbeatController.h

Go to the documentation of this file.
00001 #ifndef maciHeartbeatController_H
00002 #define maciHeartbeatController_H
00003 
00004 /*******************************************************************
00005 * E.S.O. - ACS project
00006 *
00007 * "@(#) $Id: maciHeartbeatController.h,v 1.81 2006/09/01 02:20:54 cparedes Exp $"
00008 *
00009 * who       when        what
00010 * --------  ----------  ----------------------------------------------
00011 * msekoran  2002/02/09  made ping timeout in mutable
00012 * msekoran  2001/12/24  created
00013 */
00014 
00015 #ifndef __cplusplus
00016 #error This is a C++ include file and cannot be used from plain C
00017 #endif
00018 
00019 #include <acsutil.h>
00020 #include <maciExport.h>
00021 
00022 #include <maciC.h>
00023 
00024 #include <ace/Timer_Heap_T.h>
00025 #include <ace/Timer_Queue_Adapters.h>
00026 
00027 #include <ace/Hash_Map_Manager.h>
00028 
00029 namespace maci {
00030 
00031 // Forward declaration
00032 class HeartbeatController;
00033 
00041 class HeartbeatHandler : public ACE_Event_Handler
00042 {
00043   public:
00044 
00051     HeartbeatHandler(HeartbeatController * controller, maci::Handle handle, maci::Client_ptr client);
00052 
00058     virtual int handle_timeout (const ACE_Time_Value &currentTime,
00059                                 const void *arg);
00060 
00065     virtual int handle_close (ACE_HANDLE, ACE_Reactor_Mask);
00066 
00071     void setTimerID(long timerID);
00072 
00077     long getTimerID();
00078 
00083     void updateClient(maci::Client_ptr client);
00084 
00085   private:
00086 
00088     static int m_failureLimit;
00089     
00091     maci::Handle m_handle;
00092 
00094     long m_timerID;
00095     
00097     int m_failureCount;
00098     
00100     maci::Client_var m_client;
00101 
00103     HeartbeatController * m_controller;
00104     
00105 };
00106 
00113 class HeartbeatInitializationHandler : public ACE_Event_Handler
00114 {
00115   public:
00116 
00118     static CORBA::ULong defaultInvocationTimeout;
00119 
00125     HeartbeatInitializationHandler(CORBA::ORB_ptr orb, CORBA::ULong invocationTimeout);
00126 
00132     virtual int handle_timeout (const ACE_Time_Value &currentTime,
00133                                 const void *arg);
00134 
00139     virtual int handle_close (ACE_HANDLE, ACE_Reactor_Mask);
00140 
00141   private:
00142     
00144     CORBA::ORB_var m_orb;
00145 
00147     CORBA::ULong m_invocationTimeout;
00148 
00149 };
00150 
00168 class maci_EXPORT HeartbeatController
00169 {
00170 
00171 public:
00172 
00173 
00177     HeartbeatController(maci::Manager_ptr manager);
00178     
00182     ~HeartbeatController();
00183     
00190     int start(CORBA::ORB_ptr orb, CORBA::ULong invocationTimeout);
00191 
00196     int stop();
00197     
00202     int registerClient(maci::Handle handle, maci::Client_ptr client);
00203 
00208     int deregisterClient(maci::Handle handle);
00209 
00214     maci::Manager_ptr getManager();
00215 
00216   private:
00217 
00222     int removeClient(maci::Handle handle);
00223 
00224 
00226     maci::Manager_var m_manager;
00227 
00228 
00230     typedef ACE_Timer_Heap_T<ACE_Event_Handler *,
00231         ACE_Event_Handler_Handle_Timeout_Upcall<ACE_SYNCH_RECURSIVE_MUTEX>,
00232         ACE_SYNCH_RECURSIVE_MUTEX>
00233     HB_TIMER_QUEUE;
00234 
00236     typedef ACE_Timer_Heap_Iterator_T<ACE_Event_Handler *,
00237         ACE_Event_Handler_Handle_Timeout_Upcall<ACE_SYNCH_RECURSIVE_MUTEX>,
00238         ACE_SYNCH_RECURSIVE_MUTEX>
00239     HB_TIMER_QUEUE_ITERATOR;
00240        
00241     typedef ACE_Thread_Timer_Queue_Adapter<HB_TIMER_QUEUE> HB_TIMER_THREAD;
00242 
00244     HB_TIMER_THREAD m_timerThread;
00245 
00247     typedef ACE_Hash_Map_Manager <maci::Handle, long, ACE_Recursive_Thread_Mutex> HB_HASH_MAP;
00249     typedef ACE_Hash_Map_Iterator <maci::Handle, long, ACE_Recursive_Thread_Mutex> HB_HASH_MAP_ITER;
00251     typedef ACE_Hash_Map_Entry <maci::Handle, long> HB_HASH_MAP_ENTRY;
00252 
00254     HB_HASH_MAP m_clients;
00255 
00256     // Deactivated.
00257     bool m_deactivated;
00258 
00259     friend class HeartbeatHandler;
00260 
00261 };
00262 
00263  }; 
00264 
00265 #endif  /* maciHeartbeatController_H */
00266 
00267 // ************************************************************************

Generated on Thu Jan 12 2012 23:13:51 for ACS-10.0 C++ API by  doxygen 1.7.0