summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Notify/Notify_ProxyPushConsumer_i.h
blob: f9947de33653ad6082460fae30eb8148aa5e043c (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
//=============================================================================
/**
 *  @file   Notify_ProxyPushConsumer_i.h
 *
 *  $Id$
 *
 * Implements the CosNotifyChannelAdmin::ProxyPushConsumer interface and
 * CosEventChannelAdmin::ProxyPushConsumerx
 *
 *
 *  @author Pradeep Gore <pradeep@cs.wustl.edu>
 */
//=============================================================================


#ifndef TAO_NOTIFY_PROXYPUSHCONSUMER_I_H
#define TAO_NOTIFY_PROXYPUSHCONSUMER_I_H

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

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

#include "orbsvcs/CosNotifyChannelAdminS.h"

class TAO_Notify_SupplierAdmin_i;
class TAO_Notify_Event_Manager;

#if defined(_MSC_VER)
#if (_MSC_VER >= 1200)
#pragma warning(push)
#endif /* _MSC_VER >= 1200 */
#pragma warning(disable:4250)
#endif /* _MSC_VER */

/**
 * @class TAO_Notify_ProxyPushConsumer_i
 *
 * @brief TAO_Notify_ProxyPushConsumer_i
 *
 * Implements the CosNotifyChannelAdmin::ProxyPushConsumer interface.
 */
class TAO_Notify_Export TAO_Notify_ProxyPushConsumer_i : public TAO_Notify_ProxyConsumer <POA_CosNotifyChannelAdmin::ProxyPushConsumer>
{

public:
  /// Constructor
  TAO_Notify_ProxyPushConsumer_i (TAO_Notify_SupplierAdmin_i* supplier_admin);

  /// Destructor
  virtual ~TAO_Notify_ProxyPushConsumer_i (void);

  // = Interface methods
  void push (const CORBA::Any & data ACE_ENV_ARG_DECL)
  ACE_THROW_SPEC ((
                   CORBA::SystemException,
                   CosEventComm::Disconnected
                   ));

  virtual void connect_any_push_supplier (
    CosEventComm::PushSupplier_ptr push_supplier
    ACE_ENV_ARG_DECL
  )
  ACE_THROW_SPEC ((
    CORBA::SystemException,
    CosEventChannelAdmin::AlreadyConnected
  ));

virtual void disconnect_push_consumer (
    ACE_ENV_SINGLE_ARG_DECL
  )
  ACE_THROW_SPEC ((
    CORBA::SystemException
  ));

 protected:
// = Helper methods
 virtual void dispatch_update_i (CosNotification::EventTypeSeq added, CosNotification::EventTypeSeq removed ACE_ENV_ARG_DECL);

 // = Data members
 /**
  * True if the supplier supports the NotifySubscribe interface.
  * If it does, we use the <notify_push_supplier_> else we use
  * <cosec_push_supplier_>
  */
 CORBA::Boolean notify_style_supplier_;

 /// The supplier connected to us.
 CosEventComm::PushSupplier_var cosec_push_supplier_;
 CosNotifyComm::PushSupplier_var notify_push_supplier_;

 private:
 typedef TAO_Notify_ProxyConsumer <POA_CosNotifyChannelAdmin::ProxyPushConsumer>
   proxy_inherited;
};

/**
 * @class TAO_Notify_CosEC_ProxyPushConsumer_i
 *
 * @brief TAO_Notify_CosEC_ProxyPushConsumer_i
 *
 * CosEventChannelAdmin::ProxyPushConsumer wrapper implementation.
 * Delegates to TAO_Notify_ProxyPushConsumer_i.
 */
class TAO_Notify_Export TAO_Notify_CosEC_ProxyPushConsumer_i : public virtual POA_CosEventChannelAdmin::ProxyPushConsumer, public virtual PortableServer::RefCountServantBase
{
public:
  // = Initialization and termination methods.
  /// Constructor.
  TAO_Notify_CosEC_ProxyPushConsumer_i (TAO_Notify_SupplierAdmin_i* supplieradmi);

  /// Destructor.
  virtual ~TAO_Notify_CosEC_ProxyPushConsumer_i (void);

    /// init.
  void init (ACE_ENV_SINGLE_ARG_DECL);

  /// Suppliers call this method to pass data to connected consumers.
  virtual void push (const CORBA::Any &data
                     ACE_ENV_ARG_DECL)
      ACE_THROW_SPEC ((CORBA::SystemException));

  /// Disconnects the supplier from the event communication.
  virtual void disconnect_push_consumer (ACE_ENV_SINGLE_ARG_DECL)
      ACE_THROW_SPEC ((CORBA::SystemException));

  /// Connects a push supplier.
  virtual void connect_push_supplier(CosEventComm::PushSupplier_ptr push_supplier
                                     ACE_ENV_ARG_DECL)
      ACE_THROW_SPEC ((CORBA::SystemException,
                       CosEventChannelAdmin::AlreadyConnected));
 protected:
  // = Data Members
  /// Proxy to delegate to.
  TAO_Notify_ProxyPushConsumer_i notify_proxy_;
};

#if defined(_MSC_VER) && (_MSC_VER >= 1200)
#pragma warning(pop)
#endif /* _MSC_VER */

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