Belle II Software  release-05-02-19
BinData.cc
1 #include "daq/storage/BinData.h"
2 
3 #include "daq/slc/base/IOException.h"
4 
5 #include <cstdio>
6 
7 using namespace Belle2;
8 
9 const unsigned int BinData::TRAILER_MAGIC = 0x7FFF0007;
10 
11 BinData::BinData(void* buf)
12 {
13  if (buf != NULL) {
14  setBuffer(buf);
15  m_header->nword_in_header = sizeof(BinHeader) / 4;
16  m_header->nword = (sizeof(BinHeader) + sizeof(BinTrailer)) / 4;
17  m_header->nevent_nboard = 0;
18  m_header->exp_run = 0;
19  m_header->event_number = 0;
20  m_header->node_id = 0;
21  }
22 }
23 
24 BinData::~BinData() noexcept
25 {
26 
27 }
28 
29 void BinData::setBuffer(void* buf)
30 {
31  if (buf != NULL) {
32  m_buf = (int*)buf;
33  m_header = (BinHeader*)buf;
34  m_body = (unsigned int*)(((char*)buf) + sizeof(BinHeader));
35  } else {
36  m_buf = NULL;
37  }
38 }
39 
40 unsigned int BinData::recvEvent(TCPSocket& socket)
41 {
42  unsigned int count = socket.read(m_header, sizeof(BinHeader));
43  if (m_header->nword_in_header * 4 != sizeof(BinHeader)) {
44  throw (IOException("unexpected header size %d words",
45  m_header->nword_in_header));
46  }
47  const int nbytes_remains = getByteSize() - sizeof(BinHeader);
48  count += socket.read(m_body, nbytes_remains);
49  m_trailer = (BinTrailer*)(((char*)m_body) + nbytes_remains - sizeof(BinTrailer));
50  if (m_trailer->magic != TRAILER_MAGIC) {
51  throw (IOException("unexpected header trailer magic %08x",
52  m_trailer->magic));
53  }
54  return count;
55 }
56 
57 unsigned int BinData::sendEvent(TCPSocket& socket) const
58 {
59  return socket.write(m_buf, getByteSize());
60 }
61 
62 void BinData::print() noexcept
63 {
64  printf("headerwords=%d, nwords=%d, nboard=%d, nevent=%d, evtno=%d, expno=%d, runno=%d, subno=%d, nodeid=%d, trailer=%04x\n",
65  getHeaderWordSize(),
66  getWordSize(),
67  // getBodyWordSize(),
68  getNBoard(),
69  getNEvent(),
70  getEventNumber(),
71  getExpNumber(),
72  getRunNumber(),
73  getSubNumber(),
74  getNodeId(),
75  getTrailerMagic());
76 }
Belle2::IOException
Definition: IOException.h:12
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::TCPSocket
Definition: TCPSocket.h:14
Belle2::BinHeader
Definition: BinData.h:17
Belle2::BinTrailer
Definition: BinData.h:12