1 #include "daq/storage/BinData.h"
3 #include "daq/slc/base/IOException.h"
9 const unsigned int BinData::TRAILER_MAGIC = 0x7FFF0007;
11 BinData::BinData(
void* buf)
15 m_header->nword_in_header =
sizeof(
BinHeader) / 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;
24 BinData::~BinData() noexcept
29 void BinData::setBuffer(
void* buf)
34 m_body = (
unsigned int*)(((
char*)buf) +
sizeof(
BinHeader));
40 unsigned int BinData::recvEvent(
TCPSocket& socket)
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));
47 const int nbytes_remains = getByteSize() -
sizeof(
BinHeader);
48 count += socket.read(m_body, nbytes_remains);
50 if (m_trailer->magic != TRAILER_MAGIC) {
51 throw (
IOException(
"unexpected header trailer magic %08x",
57 unsigned int BinData::sendEvent(
TCPSocket& socket)
const
59 return socket.write(m_buf, getByteSize());
62 void BinData::print() noexcept
64 printf(
"headerwords=%d, nwords=%d, nboard=%d, nevent=%d, evtno=%d, expno=%d, runno=%d, subno=%d, nodeid=%d, trailer=%04x\n",