summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Event/EC_Factory.h
blob: 20fb186340172d0f055f100ac2680f7c144123cc (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
/* -*- C++ -*- */
// $Id$
//
// ============================================================================
//
// = LIBRARY
//   ORBSVCS Real-time Event Channel
//
// = FILENAME
//   EC_Factory
//
// = AUTHOR
//   Carlos O'Ryan (coryan@cs.wustl.edu)
//
// = CREDITS
//   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://www.cs.wustl.edu/~schmidt/oopsla.ps.gz
//   http://www.cs.wustl.edu/~schmidt/JSAC-98.ps.gz
//
//
// ============================================================================

#ifndef TAO_EC_FACTORY_H
#define TAO_EC_FACTORY_H

#include "orbsvcs/orbsvcs_export.h"

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

#include "tao/corba.h"
#include "ace/Service_Object.h"

class ACE_Lock;

class TAO_EC_Event_Channel;

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;
class TAO_EC_ProxyPushSupplier_Set;
class TAO_EC_Timeout_Generator;
class TAO_EC_Scheduling_Strategy;

class TAO_ORBSVCS_Export TAO_EC_Factory : public ACE_Service_Object
{
  // = TITLE
  //   Abstract base class for the Event Channel components.
  //
  // = DESCRIPTION
  //   Defines the EC_Factory interface.
  //
  // = MEMORY MANAGMENT
  //   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.
  //
public:
  virtual ~TAO_EC_Factory (void);
  // destructor...

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

  virtual TAO_EC_Filter_Builder*
      create_filter_builder (TAO_EC_Event_Channel*)   = 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*)   = 0;
  virtual void
      destroy_supplier_filter_builder (TAO_EC_Supplier_Filter_Builder*) = 0;
  // Create and destroy the filter builder.

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

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

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

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

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

  virtual TAO_EC_ObserverStrategy*
      create_observer_strategy (TAO_EC_Event_Channel*) = 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*) = 0;
  virtual void
      destroy_scheduling_strategy (TAO_EC_Scheduling_Strategy*) = 0;
  // Create and destroy the observer strategy.

  virtual TAO_EC_ProxyPushSupplier_Set*
      create_proxy_push_supplier_set (TAO_EC_Event_Channel*) = 0;
  virtual void
      destroy_proxy_push_supplier_set (TAO_EC_ProxyPushSupplier_Set*) = 0;
  // Create and destroy a ProxyPushSupplier_Set

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

  virtual ACE_Lock* create_consumer_admin_lock (void) = 0;
  virtual void destroy_consumer_admin_lock (ACE_Lock*) = 0;
  virtual ACE_Lock* create_supplier_admin_lock (void) = 0;
  virtual void destroy_supplier_admin_lock (ACE_Lock*) = 0;
  // Create and destroy the locking strategies for both
  // ConsumerAdmin and SupplierAdmin classes.
};

#if defined (__ACE_INLINE__)
#include "EC_Factory.i"
#endif /* __ACE_INLINE__ */

#endif /* TAO_EC_FACTORY_H */