Belle II Software  release-05-02-19
EvtMessage.h
1 //+
2 // File : EvtMessage.h
3 // Description : Interface to RingBuffer and Socket
4 //
5 // Author : Soohyung Lee and Ryosuke Itoh
6 // Date : 24 - Jul - 2008
7 // Modified : 4 - Jun - 2010
8 //-
9 
10 #pragma once
11 
12 #include <RtypesCore.h>
13 
14 struct timeval;
15 
16 namespace Belle2 {
26  enum ERecordType { MSG_EVENT, MSG_BEGIN_RUN, MSG_END_RUN, MSG_TERMINATE, MSG_NORECORD, MSG_STREAMERINFO };
27 
29  struct EvtHeader {
31  EvtHeader(UInt_t aSize, ERecordType aRectype): size(aSize), rectype(aRectype) {}
32  UInt_t size;
34  Long64_t time_sec{0};
35  Long64_t time_usec{0};
36  UInt_t src{(UInt_t) - 1};
37  UInt_t dest{(UInt_t) - 1};
38  UInt_t flags{0};
40  UInt_t nObjects{0};
41  UInt_t nArrays{0};
42  UInt_t reserved[6] {0};
49  UInt_t version{0xBEEFED01};
50  };
51 
60  class EvtMessage {
61 
62  public:
64  const static unsigned int c_MaxEventSize = 200000000;
65 
71  };
72 
74  explicit EvtMessage(char* buf = nullptr);
76  EvtMessage(const char* msg, int size, ERecordType type);
78  EvtMessage(const EvtMessage& evtmsg);
80  ~EvtMessage();
81 
83  EvtMessage& operator=(const EvtMessage& obj);
84 
85 
86  // Access functions
93  char* buffer();
95  void buffer(const char*);
96 
98  int size() const;
103  int paddedSize() const;
105  int msg_size() const;
106 
108  unsigned int getVersion() const { return ((getHeader()->version & 0xFFFFFF00) == 0xBEEFED00) ? (getHeader()->version & 0xFF) : 0;}
110  unsigned int getMsgFlags() const { return getVersion() > 0 ? getHeader()->flags : 0; }
112  void setMsgFlags(unsigned int flags) { header()->flags = flags;}
114  void addMsgFlags(unsigned int flags) { header()->flags |= flags;}
116  bool hasMsgFlags(unsigned int flags) const { return (getMsgFlags() & flags) == flags; }
117 
119  ERecordType type() const;
121  void type(ERecordType);
122 
124  struct timeval time() const;
126  void setTime(const struct timeval& time);
127 
129  int src() const;
131  void src(int src);
132 
134  int dest() const;
136  void dest(int dest);
137 
139  EvtHeader* header();
141  const EvtHeader* getHeader() const;
143  char* msg();
144 
145  private:
147  void setMsg(const char* msg, int size, ERecordType type);
148 
149  char* m_data;
151  };
153 }
Belle2::EvtMessage::paddedSize
int paddedSize() const
Same as size(), but as size of an integer array.
Definition: EvtMessage.cc:100
Belle2::EvtMessage::operator=
EvtMessage & operator=(const EvtMessage &obj)
Assignment (m_data is copied).
Definition: EvtMessage.cc:65
Belle2::EvtHeader::reserved
UInt_t reserved[6]
Reserved for future use.
Definition: EvtMessage.h:42
Belle2::EvtMessage::m_ownsBuffer
bool m_ownsBuffer
Wether to clean up m_data in destructor.
Definition: EvtMessage.h:150
Belle2::EvtMessage::type
ERecordType type() const
Get record type.
Definition: EvtMessage.cc:115
Belle2::EvtMessage::c_MaxEventSize
const static unsigned int c_MaxEventSize
maximal EvtMessage size, in bytes (200MB).
Definition: EvtMessage.h:64
Belle2::EvtMessage::time
struct timeval time() const
Get time stamp.
Definition: EvtMessage.cc:148
Belle2::EvtHeader::size
UInt_t size
Number of words in this record.
Definition: EvtMessage.h:32
Belle2::EvtMessage::m_data
char * m_data
Pointer to the internal EvtMessage buffer.
Definition: EvtMessage.h:149
Belle2::EvtMessage::getMsgFlags
unsigned int getMsgFlags() const
Get flags of the message.
Definition: EvtMessage.h:110
Belle2::EvtMessage::setMsgFlags
void setMsgFlags(unsigned int flags)
Set flags for the message.
Definition: EvtMessage.h:112
Belle2::EvtMessage
Class to manage streamed object.
Definition: EvtMessage.h:60
Belle2::EvtHeader::nObjects
UInt_t nObjects
number of objects in message.
Definition: EvtMessage.h:40
Belle2::EvtHeader::time_sec
Long64_t time_sec
seconds part of timeval.
Definition: EvtMessage.h:34
Belle2::EvtMessage::dest
int dest() const
Get destination IP of message.
Definition: EvtMessage.cc:137
Belle2::EvtHeader::version
UInt_t version
version field.
Definition: EvtMessage.h:49
Belle2::EvtHeader::src
UInt_t src
source IP.
Definition: EvtMessage.h:36
Belle2::EvtHeader
Header structure of streamed object list.
Definition: EvtMessage.h:29
Belle2::EvtHeader::nArrays
UInt_t nArrays
number of objects in message.
Definition: EvtMessage.h:41
Belle2::EvtMessage::~EvtMessage
~EvtMessage()
Destructor.
Definition: EvtMessage.cc:57
Belle2::EvtMessage::hasMsgFlags
bool hasMsgFlags(unsigned int flags) const
Check if the message has the given flags.
Definition: EvtMessage.h:116
Belle2::EvtHeader::time_usec
Long64_t time_usec
micro seconds part of timeval.
Definition: EvtMessage.h:35
Belle2::EvtMessage::msg
char * msg()
Get pointer to message body.
Definition: EvtMessage.cc:173
Belle2::EvtHeader::dest
UInt_t dest
destination IP.
Definition: EvtMessage.h:37
Belle2::EvtHeader::rectype
ERecordType rectype
Type of message.
Definition: EvtMessage.h:33
Belle2::EvtMessage::size
int size() const
Get size of message including headers.
Definition: EvtMessage.cc:95
Belle2::EvtMessage::getVersion
unsigned int getVersion() const
get version of the header.
Definition: EvtMessage.h:108
Belle2::EvtHeader::flags
UInt_t flags
flags concerning the content of the message.
Definition: EvtMessage.h:38
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::EvtMessage::src
int src() const
Get source IP of message.
Definition: EvtMessage.cc:126
Belle2::ERecordType
ERecordType
What type of message is this?
Definition: EvtMessage.h:26
Belle2::EvtMessage::EMessageFlags
EMessageFlags
Flags for the message.
Definition: EvtMessage.h:67
Belle2::EvtMessage::header
EvtHeader * header()
Get pointer to EvtHeader.
Definition: EvtMessage.cc:162
Belle2::EvtMessage::getHeader
const EvtHeader * getHeader() const
Get pointer to EvtHeader.
Definition: EvtMessage.cc:167
Belle2::EvtMessage::c_MsgCompressed
@ c_MsgCompressed
indicates that the message body is compressed and should be uncompressed using ROOT R__unzip_header a...
Definition: EvtMessage.h:70
Belle2::EvtMessage::setMsg
void setMsg(const char *msg, int size, ERecordType type)
Copy message into newly allocated buffer.
Definition: EvtMessage.cc:180
Belle2::EvtMessage::setTime
void setTime(const struct timeval &time)
Set time stamp.
Definition: EvtMessage.cc:155
Belle2::EvtMessage::buffer
char * buffer()
Get buffer address.
Definition: EvtMessage.cc:77
Belle2::EvtMessage::addMsgFlags
void addMsgFlags(unsigned int flags)
Add flags to the message.
Definition: EvtMessage.h:114
Belle2::EvtMessage::msg_size
int msg_size() const
Get size of message body.
Definition: EvtMessage.cc:109
Belle2::EvtHeader::EvtHeader
EvtHeader(UInt_t aSize, ERecordType aRectype)
set number of words and record type.
Definition: EvtMessage.h:31
Belle2::EvtMessage::EvtMessage
EvtMessage(char *buf=nullptr)
build EvtMessage from existing buffer (no copy, but does not take ownership).
Definition: EvtMessage.cc:28