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
daq
rfarm
event
src
RevRb2Sock.cc
Generated on Fri Nov 5 2021 03:49:35 for Belle II Software by
1.8.17