summaryrefslogtreecommitdiff
path: root/TAO/tao/DynamicInterface/DII_Invocation.h
blob: 01b2dae15fe607bbabc82043a5564ee5b9b97e88 (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
// -*- C++ -*-

//=============================================================================
/**
 *  @file    DII_Invocation.h
 *
 *  $Id$
 *
 *  @brief The DII invocation classes.
 *
 *  @author Carlos O'Ryan <coryan@cs.wustl.edu>
 *  @author Alexander Babu Arulanthu <alex@cs.wustl.edu>
 *  @author Jeff Parsons <parsons@cs.wustl.edu>
 */
//=============================================================================

#ifndef TAO_DII_INVOCATION_H
#define TAO_DII_INVOCATION_H

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

#include "tao/DynamicInterface/dynamicinterface_export.h"

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

#include "tao/Synch_Invocation.h"
#include "tao/Messaging/Asynch_Invocation.h"

TAO_BEGIN_VERSIONED_NAMESPACE_DECL

class TAO_DII_Deferred_Reply_Dispatcher;
class TAO_DII_Asynch_Reply_Dispatcher;

namespace Dynamic
{
  class ParameterList;
}

namespace TAO
{
  class TAO_DynamicInterface_Export DII_Invocation:
    public Synch_Twoway_Invocation
  {
  public:
    friend class DII_Invocation_Adapter;

    DII_Invocation (CORBA::Object_ptr otarget,
                    Profile_Transport_Resolver &resolver,
                    TAO_Operation_Details &detail,
                    CORBA::ExceptionList *excp,
                    CORBA::Request_ptr req,
                    bool response_expected = true);

#if TAO_HAS_INTERCEPTORS ==1
    virtual Dynamic::ParameterList *arguments (void);
#endif /*TAO_HAS_INTERCEPTORS == 1*/

    Invocation_Status remote_invocation (ACE_Time_Value *max_wait_time);

    virtual Invocation_Status handle_user_exception (TAO_InputCDR &cdr);

  private:
    CORBA::ExceptionList *excp_list_;

    /// Back pointer to the DII request that created us.
    CORBA::Request_ptr host_;

  };

  class TAO_DynamicInterface_Export DII_Deferred_Invocation
    : public Asynch_Remote_Invocation
  {
  public:
    friend class DII_Deferred_Invocation_Adapter;

    DII_Deferred_Invocation (CORBA::Object_ptr otarget,
                             Profile_Transport_Resolver &resolver,
                             TAO_Operation_Details &detail,
                             TAO_DII_Deferred_Reply_Dispatcher *rd,
                             CORBA::Request_ptr req,
                             bool response_expected = true);

#if TAO_HAS_INTERCEPTORS ==1
    virtual Dynamic::ParameterList *arguments (void);
#endif /*TAO_HAS_INTERCEPTORS == 1*/

    Invocation_Status remote_invocation (ACE_Time_Value *max_wait_time);

  private:
    /// Back pointer to the DII request that created us.
    CORBA::Request_ptr host_;
  };

  /**
   * @class TAO_GIOP_DII_Asynch_Invocation
   *
   * @brief This class is responsible to send the asynchronous
   * invocation.
   *
   * This class is responsible to send the asynchronous
   * invocation. This class connects (or looks up a connection from the cache)
   * to the remote server, builds the CDR stream for the Request, send
   * the CDR stream and returns.
   *
   */
  class TAO_DynamicInterface_Export TAO_GIOP_DII_Asynch_Invocation
    : public TAO::Asynch_Remote_Invocation
  {
  public:
    TAO_GIOP_DII_Asynch_Invocation (TAO_Stub *data,
                                    TAO_ORB_Core* orb_core,
                                    CORBA::Boolean argument_flag,
                                    const CORBA::Request_ptr req,
                                    CORBA::Object_ptr reply_handler,
                                    int byte_order = TAO_ENCAP_BYTE_ORDER);

    int invoke (void);

  private:
    /// Implementation of the invoke() methods, handles the basic
    /// send/reply code and the system exceptions.
    int invoke_i (void);


    /// Reply dispatcher for the current synchronous Asynch_Invocation.
    TAO_DII_Asynch_Reply_Dispatcher *rd_;
  };

}

TAO_END_VERSIONED_NAMESPACE_DECL

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

#endif /* TAO_DII_INVOCATION_H */