server_request.h

来自「这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用」· C头文件 代码 · 共 179 行

H
179
字号
// -*- C++ -*-
//
// Server_Request.h,v 1.16 2003/10/30 16:22:33 parsons Exp

// ============================================================================
//
// = LIBRARY
//    TAO
//
// = FILENAME
//    Server_Request.h
//
// = DESCRIPTION
//    Header file for CORBA's Dynamic Server Skeleton Interface's
//    "Server Request" type.
//
// = AUTHOR
//     Copyright 1994-1995 by Sun Microsystems, Inc. and Chris Cleeland.
//     Modifications by Aniruddha Gokhale based on CORBAv2.2 Feb 98
// ============================================================================

#ifndef TAO_CORBA_SERVER_REQUEST_H
#define TAO_CORBA_SERVER_REQUEST_H

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

#include "Context.h"

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

// To force execution of the static constructor
// that registers the dynamic service object.
#include "Dynamic_Adapter_Impl.h"

#include "tao/TAO_Server_Request.h"

#if defined (TAO_EXPORT_MACRO)
#undef TAO_EXPORT_MACRO
#endif
#define TAO_EXPORT_MACRO TAO_DynamicInterface_Export

namespace CORBA
{
  class ServerRequest;
  typedef ServerRequest *ServerRequest_ptr;

  TAO_NAMESPACE_INLINE_FUNCTION void release (ServerRequest_ptr);
  TAO_NAMESPACE_INLINE_FUNCTION Boolean is_nil (ServerRequest_ptr);

  typedef TAO_Pseudo_Var_T<ServerRequest> ServerRequest_var;
  typedef TAO_Pseudo_Out_T<ServerRequest, ServerRequest_var> ServerRequest_out;

  class TAO_DynamicInterface_Export ServerRequest
  {
    // = TITLE
    //    Class representing the CORBA ServerRequest pseudo-object.
    //
    // = DESCRIPTION
    //    Instantiated by the POA for DSI requests and passed up
    //    to the application. Contains a reference to the instance
    //    of TAO_ServerRequest that is passed up to the POA from
    //    the ORB.
  public:
    ServerRequest (TAO_ServerRequest &orb_server_request);
    // Constructor.

    ~ServerRequest (void);
    // Destructor.
    
    void arguments (CORBA::NVList_ptr &list
                    ACE_ENV_ARG_DECL_WITH_DEFAULTS);
    // Implementation uses this to provide the ORB with the operation's
    // parameter list ... on return, their values are available; the
    // list fed in has typecodes and (perhap) memory assigned.
    
    void set_result (const CORBA::Any &value
                     ACE_ENV_ARG_DECL_WITH_DEFAULTS);
    // Implementation uses this to provide the operation result
    // ... illegal if exception() was called or params() was not called.
    //
    // XXX Implementation should be able to assume response has been
    // sent when this returns, and reclaim memory it allocated.
    
    void set_exception (const CORBA::Any &value
                        ACE_ENV_ARG_DECL_WITH_DEFAULTS);
    // Implementation uses this to provide the exception value which is
    // the only result of this particular invocation.
    //
    // XXX Implementation should be able to assume response has been
    // sent when this returns, and reclaim memory it allocated.
    
    // = Get various universal call attributes.
    
    // e.g., who made the call, the target of the call, what ORB and OA
    // that target object uses.
    //
    // NOTE: none of these report exceptions; unavailability of any of
    // this stuff is a catastrophic error since this is all part of the
    // basic CORBA Object Model.
    
    void dsi_marshal (ACE_ENV_SINGLE_ARG_DECL_WITH_DEFAULTS);
    // Marshal outgoing parameters.
    
    CORBA::Context_ptr ctx (void) const;
    // Accessor for the Context member.
    
    void ctx (CORBA::Context_ptr);
    // Mutator for the Context member.
    
    const char *operation (void) const;
    // Get the operation name.
    
    // Pseudo object methods.
    static ServerRequest_ptr _duplicate (ServerRequest_ptr);
    static ServerRequest_ptr _nil (void);
    
    // = Reference counting.
    CORBA::ULong _incr_refcnt (void);
    CORBA::ULong _decr_refcnt (void);
    
    void _tao_lazy_evaluation (bool lazy_evaluation);
    // Set the lazy evaluation flag.
    
    int _tao_incoming_byte_order (void) const;
    // Get the byte order of the incoming CDR stream.
    
    void _tao_reply_byte_order (int byte_order);
    // Set the byte order of the outgoing CDR stream.
    
    /// Return a reference to the underlying TAO_ServerRequest object.
    TAO_ServerRequest & _tao_server_request (void);
    
    void gateway_exception_reply (ACE_CString &raw_exception);
    // Returns a user exception through a TAO gateway without
    // knowing its type.
    
    // Useful for template programming.
    typedef CORBA::ServerRequest_ptr _ptr_type;    
    
  private:
    bool lazy_evaluation_;
    // If zero then the NVList is evaluated ASAP.
    
    CORBA::Context_ptr ctx_;
    // Context associated with this request.
    
    CORBA::NVList_ptr params_;
    // Incoming parameters.
    
    CORBA::Any_ptr retval_;
    // Return value.
    
    CORBA::Any_ptr exception_;
    // Any exception which might be raised.
    
    CORBA::ULong refcount_;
    // Reference counting.
    
    TAO_SYNCH_MUTEX lock_;
    // Protect the refcount_ and response_receieved_.

    TAO_ServerRequest &orb_server_request_;
    // Request from the ORB.
    
    int sent_gateway_exception_;
    // Have we sent a user exception obtained from a gateway?
  };
} // End CORBA namespace

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

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

#endif /* TAO_CORBA_SERVER_REQUEST_H */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?