OpenDDS  Snapshot(2023/04/28-20:55)
ReactorInterceptor.h
Go to the documentation of this file.
1 /*
2  *
3  *
4  * Distributed under the OpenDDS License.
5  * See: http://www.opendds.org/license.html
6  */
7 
8 #ifndef OPENDDS_DCPS_REACTORINTERCEPTOR_H
9 #define OPENDDS_DCPS_REACTORINTERCEPTOR_H
10 
11 #include "PoolAllocator.h"
12 #include "PoolAllocationBase.h"
13 #include "RcEventHandler.h"
14 #include "dcps_export.h"
15 #include "unique_ptr.h"
16 #include "RcHandle_T.h"
17 #include "ConditionVariable.h"
18 
19 #include <ace/Reactor.h>
20 #include <ace/Thread.h>
21 #include <ace/Thread_Mutex.h>
22 
24 
25 namespace OpenDDS {
26 namespace DCPS {
27 
29 public:
30 
32  : public virtual RcObject {
33  public:
34  Command();
35  virtual ~Command() { }
36 
37  virtual void execute() = 0;
38 
39  protected:
40  const ACE_Reactor* reactor() const { return reactor_; }
41  ACE_Reactor* reactor() { return reactor_; }
42 
43  private:
46 
48  };
50 
51  CommandPtr execute_or_enqueue(CommandPtr command);
52 
53  virtual bool reactor_is_shut_down() const = 0;
54 
55  virtual void reactor(ACE_Reactor *reactor);
56  virtual ACE_Reactor* reactor() const;
57 
58 protected:
59 
60  enum ReactorState {
64  };
65 
67  ACE_thread_t owner);
68 
69  virtual ~ReactorInterceptor();
70  int handle_exception(ACE_HANDLE /*fd*/);
72 
75  typedef OPENDDS_VECTOR(CommandPtr) Queue;
78 };
79 
82 
84 public:
85  RegisterHandler(ACE_HANDLE io_handle,
86  ACE_Event_Handler* event_handler,
87  ACE_Reactor_Mask mask)
88  : io_handle_(io_handle)
89  , event_handler_(event_handler)
90  , mask_(mask)
91  {}
92 
93 private:
94  ACE_HANDLE io_handle_;
97 
98  void execute();
99 };
100 
102 public:
103  RemoveHandler(ACE_HANDLE io_handle,
104  ACE_Reactor_Mask mask)
105  : io_handle_(io_handle)
106  , mask_(mask)
107  {}
108 
109 private:
110  ACE_HANDLE io_handle_;
112 
113  void execute();
114 };
115 
116 } // namespace DCPS
117 } // namespace OpenDDS
118 
120 
121 #endif /* OPENDDS_DCPS_REACTORINTERCEPTOR_H */
unsigned long ACE_Reactor_Mask
#define OpenDDS_Dcps_Export
Definition: dcps_export.h:24
virtual bool reactor_is_shut_down() const =0
CommandPtr execute_or_enqueue(CommandPtr command)
virtual ACE_Reactor * reactor() const
void process_command_queue_i(ACE_Guard< ACE_Thread_Mutex > &guard)
ACE_Event_Handler * event_handler_
DWORD ACE_thread_t
WeakRcHandle< ReactorInterceptor > ReactorInterceptor_wrch
RcHandle< ReactorInterceptor > ReactorInterceptor_rch
ACE_Reactor * reactor_
#define OPENDDS_END_VERSIONED_NAMESPACE_DECL
typedef OPENDDS_VECTOR(ActionConnectionRecord) ConnectionRecords
The Internal API and Implementation of OpenDDS.
Definition: AddressCache.h:28
ReactorInterceptor(ACE_Reactor *reactor, ACE_thread_t owner)
RemoveHandler(ACE_HANDLE io_handle, ACE_Reactor_Mask mask)
RegisterHandler(ACE_HANDLE io_handle, ACE_Event_Handler *event_handler, ACE_Reactor_Mask mask)