summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/ESF/ESF_Proxy_Admin.h
blob: 7b04adf48fa4708fb9b5b48335d1d6d4723556c8 (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
/* -*- C++ -*- */
// $Id$
//
// ============================================================================
//
// = LIBRARY
//   ORBSVCS Event Service Framework
//
// = FILENAME
//   ESF_Proxy_Admin
//
// = AUTHOR
//   Carlos O'Ryan (coryan@cs.wustl.edu)
//
// = CREDITS
//   http://www.cs.wustl.edu/~coryan/EC/index.html
//
// ============================================================================

#ifndef TAO_ESF_PROXY_ADMIN_H
#define TAO_ESF_PROXY_ADMIN_H

#include "ESF_Proxy_Collection.h"
#include "ESF_Worker.h"

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

template<class EVENT_CHANNEL, class PROXY>
class TAO_ESF_Proxy_Admin
{
  // = TITLE
  //   ESF_Proxy_Admin
  //
  // = DESCRIPTION
  //   Implement common tasks in the Admin interfaces.
  //
  // = REQUIREMENTS
  //
  //   The EVENT_CHANNEL interface must implement:
  //
  //   void create_proxy (PROXY*&);
  //   // create a new proxy
  //   void destroy_proxy (PROXY*);
  //   // destroy a proxy
  //
  //   void create_proxy_collection (TAO_ESF_Proxy_Collection<PROXY>*&);
  //   // create a proxy collection
  //   void destroy_proxy_collection (TAO_ESF_Proxy_Collection<PROXY>*&);
  //   // destroy a proxy collection
  //
  //  In addition to the requirements imposed by
  //  TAO_ESF_Proxy_Collection<>, the PROXY interface must define:
  //
  //  typename .... _ptr_type;
  //  // The T_ptr for the IDL interface implemented by the PROXY.
  //  typename .... _var_type;
  //  // The T_var for the IDL interface implemented by the PROXY.
  //
  //  PROXY::_ptr_type
  //      PROXY::activate (CORBA::Environment &) throw ();
  //  // activate the proxy and return the object reference
  //
public:
  TAO_ESF_Proxy_Admin (EVENT_CHANNEL *ec);
  // Constructor

  virtual ~TAO_ESF_Proxy_Admin (void);
  // destructor

  void for_each (TAO_ESF_Worker<PROXY> *worker,
                 CORBA::Environment &ACE_TRY_ENV)
      ACE_THROW_SPEC (());
  // Iterate over its internal collection.

  virtual ACE_TYPENAME PROXY::_ptr_type
      obtain (CORBA::Environment &)
          ACE_THROW_SPEC (());
  // Create a new PROXY and activate it.

  virtual void shutdown (CORBA::Environment &ACE_TRY_ENV)
      ACE_THROW_SPEC (());
  // The Event Channel that owns this Admin object is going
  // down. Invoke <shutdown> on all the proxies, cleanup the
  // collection and prepare to terminate.

  virtual void connected (PROXY *proxy,
                          CORBA::Environment &ACE_TRY_ENV)
      ACE_THROW_SPEC (());
  // A <proxy> has connected, this is invoked when the proxy's client
  // has invoked the connect_xxx_yyy() method.
  // The default implementation is a no-op.

  virtual void reconnected (PROXY *proxy,
                            CORBA::Environment &ACE_TRY_ENV)
      ACE_THROW_SPEC (());
  // A <proxy> has reconnected, i.e. its client has invoked the
  // connect_xxx_yyy() method, but the proxy was connected already.
  // The default implementation delegates on the collection
  // <reconnected> method

  virtual void disconnected (PROXY *proxy,
                             CORBA::Environment &ACE_TRY_ENV)
      ACE_THROW_SPEC (());
  // A <proxy> has been disconnected. The default implementation
  // removes the object from the collection and deactivates the
  // proxy.

private:
  EVENT_CHANNEL *event_channel_;
  // The Event Channel we belong to

  typedef TAO_ESF_Proxy_Collection<PROXY> Collection;

  Collection *collection_;
  // The supplier container.
};

// ****************************************************************

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

#if defined (ACE_TEMPLATES_REQUIRE_SOURCE)
#include "ESF_Proxy_Admin.cpp"
#endif /* ACE_TEMPLATES_REQUIRE_SOURCE */

#if defined (ACE_TEMPLATES_REQUIRE_PRAGMA)
#pragma implementation ("ESF_Proxy_Admin.cpp")
#endif /* ACE_TEMPLATES_REQUIRE_PRAGMA */

#endif /* TAO_ESF_PROXY_ADMIN_H */