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

📄 ecg_complex_address_server.h

📁 这是广泛使用的通信开源项目,对于大容量,高并发的通讯要求完全能够胜任,他广泛可用于网络游戏医学图像网关的高qos要求.更详细的内容可阅读相应的材料
💻 H
字号:
// -*- C++ -*-

/**
 *  @file   ECG_Complex_Address_Server.h
 *
 *  ECG_Complex_Address_Server.h,v 1.4 2003/08/18 06:42:14 ossama Exp
 *
 *  @author Marina Spivak (marina@atdesk.com)
 *
 */

#ifndef TAO_ECG_COMPLEX_ADDRESS_SERVER_H
#define TAO_ECG_COMPLEX_ADDRESS_SERVER_H

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

#include /**/ "event_export.h"

#include "orbsvcs/RtecUDPAdminS.h"
#include "ace/Hash_Map_Manager_T.h"
#include "ace/INET_Addr.h"
#include "ace/Null_Mutex.h"

#include "EC_Lifetime_Utils_T.h"

/**
 * @class TAO_ECG_Complex_Address_Server
 *
 * @brief Implementation of RtecUDPAdmin idl interface, which returns
 * a different multicast address based on event source (or event type
 * - depending on how the server is configured).
 *
 * INITIALIZATION STRING FORMAT
 *
 * The string is a sequence of <key>@<value> pairs separated by
 * a single space, where <key> is event source (or type)
 * and <value> is the corresponding mcast address.  Example:
 * "34@230.100.0.2:2300 45@230.100.123.43:2300"
 * The string above represents two key-value pairs.
 *
 * A special key "*" is used to specify the default mcast address,
 * i.e., the one that will be returned for event sources that weren't
 * explicitly specified in the initialization string.  Example:
 * "*@230.100.0.2:2300 45@230.100.123.43:2300"
 *
 */
class TAO_RTEvent_Export TAO_ECG_Complex_Address_Server :
  public virtual POA_RtecUDPAdmin::AddrServer,
  public virtual PortableServer::RefCountServantBase
{
public:

  /// Create a new TAO_ECG_Complex_Address_Server object.
  /*
   * (Constructor access is restricted to insure that all
   * TAO_ECG_Complex_Address_Server objects are heap-allocated.)
   * <is_source_mapping> flag indicates whether this
   * server maps based on event header source or event header type.
   */
  static TAO_EC_Servant_Var<TAO_ECG_Complex_Address_Server>
         create (int is_source_mapping = 1);

  /// Destructor
  virtual ~TAO_ECG_Complex_Address_Server (void);

  /// Initializes the mapping from the <arg> string.  See class notes
  /// for the expected format.
  int init (const char *arg);

  // = The RtecUDPAdmin::AddrServer methods
  virtual void get_addr (const RtecEventComm::EventHeader& header,
                         RtecUDPAdmin::UDP_Addr_out addr
                         ACE_ENV_ARG_DECL)
      ACE_THROW_SPEC ((CORBA::SystemException));

  /// Prints out complete content of the address server. Useful for
  /// debugging.
  void dump_content (void);

protected:

  /// Constructor (protected).  Clients can create new
  /// TAO_ECG_Complex_Address_Server objects using the static create()
  /// method.
  /// <is_source_mapping> flag indicates whether this
  /// server maps based on event header source or event header type.
  TAO_ECG_Complex_Address_Server (int is_source_mapping = 1);

private:

  /// Helper.  Given key and mcast address in string form, add them to
  /// the mapping.
  int add_entry (const char * key, const char * mcast_addr);

  /// Flag indicating whether this address server maps event source or
  /// event type to mcast groups.
  int is_source_mapping_;

  typedef ACE_Hash_Map_Manager_Ex<CORBA::Long, ACE_INET_Addr,
    ACE_Hash<CORBA::Long>, ACE_Equal_To<CORBA::Long>, ACE_Null_Mutex> MAP;

  MAP mcast_mapping_;

  /// Mcast group to be used for all sources (or types) not explicitly
  /// mapped.
  ACE_INET_Addr default_addr_;
};

#if defined(__ACE_INLINE__)
#include "ECG_Complex_Address_Server.i"
#endif /* __ACE_INLINE__ */

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

#endif  /* TAO_ECG_COMPLEX_ADDRESS_SERVER_H */

⌨️ 快捷键说明

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