00001 //-*- C++ -*- 00011 // $Id: Base_Packet.h 10 2007-06-06 20:58:33Z eddyxu $ 00012 00013 #ifndef QLIB_ACE_BASE_PACKET_H 00014 #define QLIB_ACE_BASE_PACKET_H 00015 00016 #include <ace/OS.h> 00017 00018 class ACE_Message_Block; 00019 00020 namespace qlib { 00021 00022 namespace ace { 00023 00029 template< 00030 typename H, 00031 typename B 00032 > 00033 struct Base_Packet { 00034 typedef H header_type; 00035 typedef header_type* header_pointer; 00036 typedef B body_type; 00037 typedef body_type* body_pointer; 00038 00039 Base_Packet() : header_(0), body_(0); 00040 Base_Packet(header_pointer hdr, body_pointer bd): header_(hdr), body_(bd) {} 00041 virtual ~Base_Packet() { 00042 delete body_; 00043 delete header_; 00044 } 00045 00046 header_pointer header(void) { return header_; } 00047 void header(header_pointer hdr) { header_ = hdr; } 00048 body_pointer body(void) { return body_; } 00049 void body(body_pointer bd) { body_ = bd; } 00050 public: 00051 virtual int parse(const void *buffer, ssize_t length) = 0; 00052 virtual int parse(ACE_Message_Block *mb, ssize_t length=0) = 0; 00053 00054 ACE_Message_Block* to_mb(void); 00055 private: 00056 header_type * header_; 00057 body_type * body_; 00058 }; 00059 00060 } // ace 00061 00062 } // qlib 00063 00064 #endif /* QLIB_ACE_BASE_PACKET_H */