Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

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 Apr 30 02:30:51 2009 for ACS C++ API by doxygen 1.3.8