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

📄 event.h

📁 ACE自适配通信环境(ADAPTIVE Communication Environment)是可以自由使用、开放源码的面向对象(OO)框架(Framework)
💻 H
字号:
/* -*- C++ -*- */// Event.h,v 4.12 2004/04/23 03:06:19 ossama Exp// ============================================================================//// = LIBRARY//    gateway//// = FILENAME//    Event.h//// = AUTHOR//    Doug Schmidt//// ============================================================================#ifndef EVENT_H#define EVENT_H#include "ace/os_include/arpa/os_inet.h"#if !defined (ACE_LACKS_PRAGMA_ONCE)# pragma once#endif /* ACE_LACKS_PRAGMA_ONCE */#include "ace/Basic_Types.h"// = The following #defines should really be in a separate include// file that is shared with the ../Peer/ directory.  For now, we'll// keep them here to simplify the sharing between the two directories.// BTW, this is also the reason why all the methods are inlined...// Used by Peers to create Consumers in a Gateway.#if !defined (DEFAULT_GATEWAY_CONSUMER_PORT)#define DEFAULT_GATEWAY_CONSUMER_PORT 10009#endif /* DEFAULT_GATEWAY_CONSUMER_PORT */// Used by Peers create Suppliers in a Gateway.#if !defined (DEFAULT_GATEWAY_SUPPLIER_PORT)#define DEFAULT_GATEWAY_SUPPLIER_PORT 10010#endif /* DEFAULT_GATEWAY_SUPPLIER_PORT */// Used by a Gateway to create Consumers in a Peer.#if !defined (DEFAULT_PEER_CONSUMER_PORT)#define DEFAULT_PEER_CONSUMER_PORT 10011#endif /* DEFAULT_PEER_CONSUMER_PORT */// Used by a Gateway to create Suppliers in a Peer.#if !defined (DEFAULT_PEER_SUPPLIER_PORT)#define DEFAULT_PEER_SUPPLIER_PORT 10012#endif /* DEFAULT_PEER_SUPPLIER_PORT */#if !defined (MAX_CONSUMERS)#define MAX_CONSUMERS 1000#endif /* MAX_CONSUMERS */// This is the unique supplier identifier that denotes a particular// <Connection_Handler> in the Gateway.typedef ACE_INT32 CONNECTION_ID;enum{  // = These are the types of events generated by the <Suppliers> and  // handled by the <Event_Channel>.  ROUTING_EVENT = 0,  // A normal event, which is forwarded to the <Consumers>.  SUBSCRIPTION_EVENT = 1  // A subscription to <Suppliers> managed by the <Event_Channel>.};class Event_Key{  // = TITLE  //     Address used to identify the source/destination of an event.  //  // = DESCRIPTION  //     This is really a "processing descriptor" that is used to  //     decouple the processing, filtering, and forwarding logic of  //     the Event Channel from the format of the data.  The  //     <connection_id_> and <type_> fields are copied from the  //     <Event_Header> class below.public:  Event_Key (CONNECTION_ID cid = -1,             ACE_INT32 type = 0,             ACE_INT32 priority = 0)    : connection_id_ (cid),      type_ (type),      priority_ (priority)  {  }  bool operator== (const Event_Key &event_addr) const  {    return this->connection_id_ == event_addr.connection_id_      && this->type_ == event_addr.type_;  }  CONNECTION_ID connection_id_;  // Unique connection identifier that denotes a particular  // Connection_Handler.  ACE_INT32 type_;  // Event type, e.g., <ROUTING_EVENT> or <SUBSCRIPTION_EVENT>.  ACE_INT32 priority_;  // Event priority.};class Event_Header{  // = TITLE  //     Fixed sized header.  //  // = DESCRIPTION  //     This is designed to have a sizeof (16) to avoid alignment  //     problems on most platforms.public:  enum  {    INVALID_ID = -1 // No peer can validly use this number.  };  Event_Header (ACE_INT32 len,                CONNECTION_ID connection_id,                ACE_INT32 type,                ACE_INT32 priority)    : len_ (len),      connection_id_ (connection_id),      type_ (type),      priority_ (priority)  {  }  void decode (void)  {    this->len_ = ntohl (this->len_);    this->connection_id_ = ntohl (this->connection_id_);    this->type_ = ntohl (this->type_);    this->priority_ = ntohl (this->priority_);  }  // Decode from network byte order to host byte order.  void encode (void)  {    this->len_ = htonl (this->len_);    this->connection_id_ = htonl (this->connection_id_);    this->type_ = htonl (this->type_);    this->priority_ = htonl (this->priority_);  }  // Encode from host byte order to network byte order.  ACE_INT32 len_;  // Length of the data_ payload, in bytes.  CONNECTION_ID connection_id_;  // Unique connection identifier that denotes a particular  // Connection_Handler.  ACE_INT32 type_;  // Event type, e.g., <ROUTING_EVENT> or <SUBSCRIPTION_EVENT>.  ACE_INT32 priority_;  // Event priority.};class Event{  // = TITLE  //    Variable-sized event (data_ may be variable-sized between  //    0 and MAX_PAYLOAD_SIZE).public:  enum { MAX_PAYLOAD_SIZE = 1024 };  // The maximum size of an Event.  Event () : header_ (0, -1, 0, 0) {};  Event_Header header_;  // Event header.  char data_[MAX_PAYLOAD_SIZE];  // Event data.};class Subscription{  // = TITLE  //     Allows Consumers to subscribe to be routed information  //     arriving from a particular Supplier connection id.public:  void decode (void)    {      this->connection_id_ = ntohl (this->connection_id_);      for (ACE_INT32 i = 0; i < this->total_consumers_; i++)        this->consumers_[i] = ntohl (this->consumers_[i]);      this->total_consumers_ = ntohl (this->total_consumers_);    }  // Decode from network byte order to host byte order.  void encode (void)    {      this->connection_id_ = htonl (this->connection_id_);      for (ACE_INT32 i = 0; i < this->total_consumers_; i++)        this->consumers_[i] = htonl (this->consumers_[i]);      this->total_consumers_ = htonl (this->total_consumers_);    }  // Encode from host byte order to network byte order.  ACE_INT32 connection_id_;  // Connection id.  ACE_INT32 consumers_[MAX_CONSUMERS];  // Connection ids for consumers that will be routed information  // containing this <connection_id_>  ACE_INT32 total_consumers_;  // Total number of these consumers.};#endif /* EVENT_H */

⌨️ 快捷键说明

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