summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Event/EC_Factory.h
blob: 8b7a66455da14f1b94dfb7ef5c571a9f27f1811a (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
// -*- C++ -*-
/**
 *  @file   EC_Factory.h
 *
 *  @author Carlos O'Ryan (coryan@cs.wustl.edu)
 *
 * Based on previous work by Tim Harrison (harrison@cs.wustl.edu) and
 * other members of the DOC group. More details can be found in:
 *
 * http://doc.ece.uci.edu/~coryan/EC/index.html
 */

#ifndef TAO_EC_FACTORY_H
#define TAO_EC_FACTORY_H

#include /**/ "ace/pre.h"

#include /**/ "orbsvcs/Event/event_serv_export.h"

#if !defined (ACE_LACKS_PRAGMA_ONCE)
# pragma once
#endif /* ACE_LACKS_PRAGMA_ONCE */

#include "tao/Versioned_Namespace.h"

#include "ace/Service_Object.h"

ACE_BEGIN_VERSIONED_NAMESPACE_DECL
class ACE_Lock;
ACE_END_VERSIONED_NAMESPACE_DECL

TAO_BEGIN_VERSIONED_NAMESPACE_DECL

class TAO_EC_Event_Channel_Base;

class TAO_EC_Dispatching;
class TAO_EC_Filter_Builder;
class TAO_EC_Supplier_Filter_Builder;
class TAO_EC_ConsumerAdmin;
class TAO_EC_SupplierAdmin;
class TAO_EC_ProxyPushConsumer;
class TAO_EC_ProxyPushSupplier;
class TAO_EC_ObserverStrategy;
template<class PROXY> class TAO_ESF_Proxy_Collection;
class TAO_EC_Timeout_Generator;
class TAO_EC_Scheduling_Strategy;
class TAO_EC_ConsumerControl;
class TAO_EC_SupplierControl;

typedef TAO_ESF_Proxy_Collection<TAO_EC_ProxyPushConsumer> TAO_EC_ProxyPushConsumer_Collection;
typedef TAO_ESF_Proxy_Collection<TAO_EC_ProxyPushSupplier> TAO_EC_ProxyPushSupplier_Collection;

/**
 * @class TAO_EC_Factory
 *
 * @brief Abstract base class for the Event Channel components.
 *
 * Defines the EC_Factory interface.
 *
 * <H2>Memory Management</H2>
 * The objects it creates are owned by this class, the client must
 * invoke the corresponding destroy() method to release them.
 * Some implementations may require a different instance for the
 * EC_Factory for each instance of Event_Channel.
 */
class TAO_RTEvent_Serv_Export TAO_EC_Factory : public ACE_Service_Object
{
public:
  /// destructor...
  TAO_EC_Factory ();
  virtual ~TAO_EC_Factory ();

  /// Create and destroy the dispatching module.
  virtual TAO_EC_Dispatching*
      create_dispatching (TAO_EC_Event_Channel_Base*) = 0;
  virtual void
      destroy_dispatching (TAO_EC_Dispatching*)  = 0;

  /// Create and destroy the filter builder.
  virtual TAO_EC_Filter_Builder*
      create_filter_builder (TAO_EC_Event_Channel_Base*)   = 0;
  virtual void
      destroy_filter_builder (TAO_EC_Filter_Builder*) = 0;

  /// Create and destroy the filter builder.
  virtual TAO_EC_Supplier_Filter_Builder*
      create_supplier_filter_builder (TAO_EC_Event_Channel_Base*)   = 0;
  virtual void
      destroy_supplier_filter_builder (TAO_EC_Supplier_Filter_Builder*) = 0;

  /// Create and destroy the consumer admin implementation.
  virtual TAO_EC_ConsumerAdmin*
      create_consumer_admin (TAO_EC_Event_Channel_Base*)  = 0;
  virtual void
      destroy_consumer_admin (TAO_EC_ConsumerAdmin*) = 0;

  /// Create and destroy the supplier admin implementation.
  virtual TAO_EC_SupplierAdmin*
      create_supplier_admin (TAO_EC_Event_Channel_Base*)  = 0;
  virtual void
      destroy_supplier_admin (TAO_EC_SupplierAdmin*) = 0;

  /// Create and destroy a ProxyPushSupplier
  virtual TAO_EC_ProxyPushSupplier*
      create_proxy_push_supplier (TAO_EC_Event_Channel_Base*) = 0;
  virtual void
      destroy_proxy_push_supplier (TAO_EC_ProxyPushSupplier*) = 0;

  /// Create and destroy a ProxyPushConsumer
  virtual TAO_EC_ProxyPushConsumer*
      create_proxy_push_consumer (TAO_EC_Event_Channel_Base*) = 0;
  virtual void
      destroy_proxy_push_consumer (TAO_EC_ProxyPushConsumer*) = 0;

  /// Create and destroy the timer module.
  virtual TAO_EC_Timeout_Generator*
      create_timeout_generator (TAO_EC_Event_Channel_Base*)  = 0;
  virtual void
      destroy_timeout_generator (TAO_EC_Timeout_Generator*) = 0;

  /// Create and destroy the observer strategy.
  virtual TAO_EC_ObserverStrategy*
      create_observer_strategy (TAO_EC_Event_Channel_Base*) = 0;
  virtual void
      destroy_observer_strategy (TAO_EC_ObserverStrategy*) = 0;

  /// Create and destroy the observer strategy.
  virtual TAO_EC_Scheduling_Strategy*
      create_scheduling_strategy (TAO_EC_Event_Channel_Base*) = 0;
  virtual void
      destroy_scheduling_strategy (TAO_EC_Scheduling_Strategy*) = 0;

  /// Create and destroy a collection of TAO_EC_ProxyPushConsumers
  virtual TAO_EC_ProxyPushConsumer_Collection*
      create_proxy_push_consumer_collection (TAO_EC_Event_Channel_Base*) = 0;
  virtual void
      destroy_proxy_push_consumer_collection (TAO_EC_ProxyPushConsumer_Collection*) = 0;

  /// Create and destroy a collection of TAO_EC_ProxyPushSuppliers
  virtual TAO_EC_ProxyPushSupplier_Collection*
      create_proxy_push_supplier_collection (TAO_EC_Event_Channel_Base*) = 0;
  virtual void
      destroy_proxy_push_supplier_collection (TAO_EC_ProxyPushSupplier_Collection*) = 0;

  /// Create and destroy the locking strategies for both
  /// ProxyPushConsumers and ProxyPushSuppliers
  virtual ACE_Lock* create_consumer_lock () = 0;
  virtual void destroy_consumer_lock (ACE_Lock*) = 0;
  virtual ACE_Lock* create_supplier_lock () = 0;
  virtual void destroy_supplier_lock (ACE_Lock*) = 0;

  /// The ConsumerControl and SupplierControl strategies are used to
  /// discard non-existent consumers and suppliers
  virtual TAO_EC_ConsumerControl*
      create_consumer_control (TAO_EC_Event_Channel_Base*) = 0;
  virtual void
      destroy_consumer_control (TAO_EC_ConsumerControl*) = 0;
  virtual TAO_EC_SupplierControl*
      create_supplier_control (TAO_EC_Event_Channel_Base*) = 0;
  virtual void
      destroy_supplier_control (TAO_EC_SupplierControl*) = 0;
};

TAO_RTEvent_Serv_Export extern unsigned short TAO_EC_debug_level;

TAO_END_VERSIONED_NAMESPACE_DECL

#include /**/ "ace/post.h"

#endif /* TAO_EC_FACTORY_H */