Belle II Software  release-05-01-25
RevRb2Sock.cc
1 //+
2 // File : RevRb2Sock.cc
3 // Description : Send events in RingBuffer to Socket
4 // Reverse Direction
5 //
6 // Author : Ryosuke Itoh, IPNS, KEK
7 // Date : 25 - Jul - 2013
8 //-
9 
10 #include "daq/rfarm/event/RevRb2Sock.h"
11 
12 #include <unistd.h>
13 
14 using namespace std;
15 using namespace Belle2;
16 
17 RevRb2Sock::RevRb2Sock(string rbuf, int port, string shmname, int id)
18 {
19  // m_rbuf = new RingBuffer((char*)rbuf.c_str(), RBUFSIZE);
20  m_rbuf = new RingBuffer((char*)rbuf.c_str());
21  m_sock = new REvtSocketSend(port);
22  m_evtbuf = new char[MAXEVTSIZE];
23  m_flow = new RFFlowStat((char*)shmname.c_str(), id, m_rbuf);
24 
25 }
26 
27 RevRb2Sock::~RevRb2Sock(void)
28 {
29  delete m_sock;
30  delete m_rbuf;
31 }
32 
33 int RevRb2Sock::SendEvent(void)
34 {
35  // Get a record from ringbuf
36  int size;
37  while ((size = m_rbuf->remq((int*)m_evtbuf)) == 0) {
38  // printf ( "Rx : evtbuf is not available yet....\n" );
39  // usleep(100);
40  usleep(20);
41  }
42  m_flow->log(size * 4);
43 
44  EvtMessage* msg = new EvtMessage(m_evtbuf); // Ptr copy, no overhead
45 
46  if (msg->type() == MSG_TERMINATE) {
47  printf("EoF found. Exitting.....\n");
48  m_sock->send(msg);
49  delete msg;
50  return -1;
51  } else {
52  int is = m_sock->send(msg);
53  delete msg;
54  return is;
55  // return msg->size();
56  }
57 }
58 
Belle2::EvtMessage::type
ERecordType type() const
Get record type.
Definition: EvtMessage.cc:115
Belle2::EvtMessage
Class to manage streamed object.
Definition: EvtMessage.h:60
Belle2::RFFlowStat
Definition: RFFlowStat.h:28
Belle2::RingBuffer
Class to manage a Ring Buffer placed in an IPC shared memory.
Definition: RingBuffer.h:36
Belle2
Abstract base class for different kinds of events.
Definition: MillepedeAlgorithm.h:19
Belle2::REvtSocketSend
Definition: REvtSocket.h:46