⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 htbp_session.h

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 H
字号:
// -*- C++ -*-//=============================================================================/** *  @file    HTBP_Session.h * *  HTBP_Session.h,v 1.2 2005/11/27 12:11:35 ossama Exp * *  @author Phil Mesnier *///=============================================================================#ifndef ACE_HTBP_SESSION_H#define ACE_HTBP_SESSION_H#include /**/ "ace/pre.h"#include "ace/SOCK_IO.h"#include "ace/Hash_Map_Manager.h"#include "ace/Synch.h"#include "ace/Message_Queue.h"#if !defined (ACE_LACKS_PRAGMA_ONCE)# pragma once#endif /* ACE_LACKS_PRAGMA_ONCE */#include "HTBP_Addr.h"#include "HTBP_Export.h"#include "HTBP_Channel.h"#include "HTBP_Stream.h"ACE_BEGIN_VERSIONED_NAMESPACE_DECL// Forward declarations.class ACE_HTBP_Filter;class ACE_Event_Handler;namespace ACE{  namespace HTBP  {    class Session_Id_t    {    public:      ACE_UINT32 id_;      Addr    local_;      Addr    peer_;      u_long hash () const;      bool operator ==(const Session_Id_t &other) const;    };    /**     * @class Session     *     * @brief Defines the methods in the <Session> abstraction.     *     * A session is an entity that combines two Ht_Channels that connect directly     * to a proxy to manage communication with a remote peer. The Session may     * persist longer than either stream, assuming that the proxy is libel to     * close a connection at any time.     *     * This means that the session needs to be able to reconnect to the remote     * peer. This also means that the session needs to be aware of its location     * If it is outside the proxy and looses a stream, oh well. If it is inside,     * then the next time a stream is required, then it must reconnect before     * returning the stream.     *     * The session does not queue outbound messages. That is going to be the     * responsibility of the application, or a higher level protocol wrapper.     */    class HTBP_Export Session    {    public:      // Initialization and termination methods.      /// Constructor.      Session (void);      /// Constructor (sets the underlying session id with <sid>).      Session (const Addr& peer,               const Addr& local,               ACE_UINT32 sid = 0,               ACE_INET_Addr *proxy = 0,               int take_proxy = 0);      Session (const Session_Id_t &id,               ACE_INET_Addr *proxy = 0,               int take_proxy = 0);      Session (const Session &other);      Session& operator= (const Session &other);      /// Destructor.      ~Session (void);      /// The following methods are specific to the Session      static ACE_UINT32 next_session_id ();      static int add_session (Session *);      static int remove_session (Session *);      static int find_session (const Session_Id_t&,                               Session *&out);      Stream *stream (void) const;      void stream (Stream *);      int enqueue (ACE_Message_Block *msg);      int flush_outbound_queue (void);      int close_inbound (void) const;      int close_outbound (void) const;      /// get references to the actual streams based on the direction      /// of data flow if this session is on the inside of the proxy      /// ie, has a non-null proxy addr, then the inbound stream is      /// the out_to_in stream, otherwise it is the in_to_out      /// stream. The outbound is the opposite of the inbound.      /// Whenever an application wishes to send data, whether that is      /// request or reply data, it uses the outbound stream, and it      /// should associate an event handler with the inbound stream      /// for receiving data.      Channel *inbound (void) const;      Channel *outbound (void) const;      void inbound (Channel *);      void outbound (Channel *);      int enable (int value);      int disable (int value);      const Session_Id_t& session_id(void) const;      void session_id (ACE_UINT32 );      const ACE_INET_Addr *proxy_addr (void) const;      void proxy_addr (ACE_INET_Addr *, int destroy = 0);      const Addr &peer_addr (void) const;      const Addr &local_addr (void) const;      void peer_addr (const Addr &);      void local_addr (const Addr &);      /// invoke close on both streams, then remove self from session map      int close (void);      ACE_Event_Handler *handler (void);      void handler (ACE_Event_Handler *);      void reactor (ACE_Reactor *);      void detach (Channel *);      int sock_flags(void) const;    private:      /// Connected Stream ensures that the particular stream is      /// connected to the proxy, if possible. The result is same as      /// the reference passed in, so that it may be used inline for      /// the inboundor outbound methods      void reconnect ();      void reconnect_i (Channel *);      typedef ACE_Hash_Map_Manager<Session_Id_t, Session*,                                   ACE_SYNCH_MUTEX> Session_Map;      typedef ACE_Hash_Map_Entry <Session_Id_t, Session*> Map_Entry;      static Session_Map session_map_;      static ACE_UINT32 last_session_id_;      static ACE_SYNCH_MUTEX session_id_lock_;      ACE_INET_Addr *proxy_addr_;      int destroy_proxy_addr_;      Session_Id_t session_id_;      Channel *inbound_;      Channel *outbound_;      Filter *inbound_filter_;      Filter *outbound_filter_;      int closed_;      ACE_Event_Handler *handler_;      ACE_Reactor *reactor_;      ACE_Message_Queue<ACE_SYNCH> outbound_queue_;      Stream * stream_;      int sock_flags_;    };  }}ACE_END_VERSIONED_NAMESPACE_DECL#if defined (__ACE_INLINE__)#include "HTBP_Session.inl"#endif#include /**/ "ace/post.h"#endif /* ACE_HTBP_SESSION_H */

⌨️ 快捷键说明

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