summaryrefslogtreecommitdiff
path: root/TAO/orbsvcs/orbsvcs/Notify/Method_Request_Lookup.h
blob: 89d9b8f6c1b691d78a857f6c3fbf92b7374d60ae (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
/* -*- C++ -*- */
/**
 *  @file Method_Request_Lookup.h
 *
 *  $Id$
 *
 *  @author Pradeep Gore <pradeep@oomworks.com>
 *
 *
 */

#ifndef TAO_Notify_LOOKUP_METHOD_REQUEST_H
#define TAO_Notify_LOOKUP_METHOD_REQUEST_H
#include /**/ "ace/pre.h"

#include "notify_serv_export.h"

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

#include "orbsvcs/ESF/ESF_Worker.h"
#include "Method_Request_Event.h"
#include "ProxySupplier.h"
#include "ProxyConsumer.h"
#include "Consumer_Map.h"
#include "Delivery_Request.h"

class TAO_Notify_Method_Request_Lookup_Queueable;
class TAO_Notify_Event;

/**
 * @class TAO_Notify_Method_Request_Lookup
 *
 * @brief
 *
 */
class TAO_Notify_Serv_Export TAO_Notify_Method_Request_Lookup
  : public TAO_ESF_Worker<TAO_Notify_ProxySupplier>
  , public TAO_Notify_Method_Request_Event
{
public:

  /// an arbitrary code (Octet) to identify this type of request in persistent storage
  enum {persistence_code = 2};

  /// Destructor
  virtual ~TAO_Notify_Method_Request_Lookup ();

  /// Static method used to reconstruct a Method Request Dispatch
  static TAO_Notify_Method_Request_Lookup_Queueable * unmarshal (
    TAO_Notify::Delivery_Request_Ptr & delivery_request,
    TAO_Notify_EventChannelFactory &ecf,
    TAO_InputCDR & cdr
    ACE_ENV_ARG_DECL);

protected:
  /// Constuctor
  TAO_Notify_Method_Request_Lookup (const TAO_Notify_Event * event, TAO_Notify_ProxyConsumer * proxy);

  /// Execute the dispatch operation.
  int execute_i (ACE_ENV_SINGLE_ARG_DECL);

  ///= TAO_ESF_Worker method
  virtual void work (TAO_Notify_ProxySupplier* proxy_supplier ACE_ENV_ARG_DECL);

protected:

  /// The Proxy
  TAO_Notify_ProxyConsumer* proxy_consumer_;
};

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

/**
 * @class TAO_Notify_Method_Request_Lookup_Queueable
 *
 * @brief Lookup command object looks up the event type of the given event in the consumer map and send the event to each proxysupplier.
 *
 */
class TAO_Notify_Serv_Export TAO_Notify_Method_Request_Lookup_Queueable
  : public TAO_Notify_Method_Request_Lookup
  , public TAO_Notify_Method_Request_Queueable
{
public:
  /// Constuctor from event
  TAO_Notify_Method_Request_Lookup_Queueable (
    const TAO_Notify_Event_var& event,
    TAO_Notify_ProxyConsumer * proxy_consumer);

  /// Constuctor from delivery request
  TAO_Notify_Method_Request_Lookup_Queueable (
    TAO_Notify::Delivery_Request_Ptr & request,
    TAO_Notify_ProxyConsumer * proxy_consumer);

  /// Destructor
  ~TAO_Notify_Method_Request_Lookup_Queueable ();

  /// Execute the Request
  virtual int execute (ACE_ENV_SINGLE_ARG_DECL);

private:
  const TAO_Notify_Event_var event_var_;
  TAO_Notify_ProxyConsumer_Guard proxy_guard_;
};

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

/**
 * @class TAO_Notify_Method_Request_Lookup_No_Copy
 *
 * @brief Lookup command object looks up the event type of the given event in the consumer map and send the event to each proxysupplier.
 *
 */
class TAO_Notify_Serv_Export TAO_Notify_Method_Request_Lookup_No_Copy
  : public TAO_Notify_Method_Request_Lookup
  , public TAO_Notify_Method_Request
{
public:
  /// Constuctor
  TAO_Notify_Method_Request_Lookup_No_Copy (
    const TAO_Notify_Event* event,
    TAO_Notify_ProxyConsumer* proxy_consumer);

  /// Destructor
  ~TAO_Notify_Method_Request_Lookup_No_Copy ();

  /// Execute the Request
  virtual int execute (ACE_ENV_SINGLE_ARG_DECL);

  /// Create a copy of this object.
  virtual TAO_Notify_Method_Request_Queueable* copy (ACE_ENV_SINGLE_ARG_DECL);
};

#if defined (__ACE_INLINE__)
#include "Method_Request_Lookup.inl"
#endif /* __ACE_INLINE__ */

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