Belle II Software
release-05-01-25
RevSock2Rb.cc
1
//+
2
// File : RevSock2Rb.cc
3
// Description : Receive events from Socket and place them in Rbuf
4
//
5
// Author : Ryosuke Itoh, IPNS, KEK
6
// Date : 26 - Apr - 2012
7
//-
8
9
#include "daq/rfarm/event/RevSock2Rb.h"
10
11
#include <unistd.h>
12
13
using namespace
std;
14
using namespace
Belle2
;
15
16
RevSock2Rb::RevSock2Rb(
string
rbuf,
string
src,
int
port,
string
shmname,
int
id
)
17
{
18
// m_rbuf = new RingBuffer(rbuf.c_str(), RBUFSIZE);
19
m_rbuf =
new
RingBuffer
(rbuf.c_str());
20
m_sock =
new
REvtSocketRecv
(src, port);
21
m_evtbuf =
new
char
[MAXEVTSIZE];
22
m_flow =
new
RFFlowStat
((
char
*)shmname.c_str(),
id
, m_rbuf);
23
24
}
25
26
RevSock2Rb::~RevSock2Rb(
void
)
27
{
28
delete
m_sock;
29
delete
m_rbuf;
30
}
31
32
int
RevSock2Rb::ReceiveEvent(
void
)
33
{
34
// Get a record from socket
35
EvtMessage
* msg = m_sock->recv();
36
if
(msg == NULL) {
37
return
0;
38
}
39
// B2INFO ( "Rx: got an event from Socket, size=" << msg->size() );
40
if
(msg->
type
() == MSG_TERMINATE) {
41
return
0;
42
// Flag End Of File !!!!!
43
// return msg->type(); // EOF
44
}
45
m_flow->log(msg->
size
());
46
47
// Put the message in ring buffer
48
int
stat = 0;
49
for
(;;) {
50
stat = m_rbuf->insq((
int
*)msg->
buffer
(), msg->
paddedSize
());
51
if
(stat >= 0)
break
;
52
// usleep(100);
53
usleep(20);
54
}
55
delete
msg;
56
return
stat;
57
}
58
59
int
RevSock2Rb::Reconnect(
int
ntimes)
60
{
61
return
(m_sock->sock())->reconnect(ntimes);
62
}
Belle2::EvtMessage::paddedSize
int paddedSize() const
Same as size(), but as size of an integer array.
Definition:
EvtMessage.cc:100
Belle2::REvtSocketRecv
Definition:
REvtSocket.h:26
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::EvtMessage::size
int size() const
Get size of message including headers.
Definition:
EvtMessage.cc:95
Belle2
Abstract base class for different kinds of events.
Definition:
MillepedeAlgorithm.h:19
Belle2::EvtMessage::buffer
char * buffer()
Get buffer address.
Definition:
EvtMessage.cc:77
daq
rfarm
event
src
RevSock2Rb.cc
Generated on Fri Nov 5 2021 03:49:36 for Belle II Software by
1.8.17