Belle II Software development
EventServer Class Reference

Public Member Functions

 EventServer (std::string rbufname, int port)
 
int server ()
 

Private Attributes

EvtSocketRecvm_sock
 
EvtSocketManagerm_man
 
RingBufferm_rbuf
 
int m_port
 
int m_force_exit
 

Detailed Description

Definition at line 25 of file EventServer.h.

Constructor & Destructor Documentation

◆ EventServer()

EventServer ( std::string  rbufname,
int  port 
)

Definition at line 19 of file EventServer.cc.

19 : m_port(port)
20{
21 // Attach to RingBuffer
22 m_rbuf = new RingBuffer(rbufname.c_str());
23
24 // Open EvtSocket
25 m_sock = new EvtSocketRecv(m_port, false);
26 m_man = new EvtSocketManager(m_sock);
27}
Class to manage a Ring Buffer placed in an IPC shared memory.
Definition: RingBuffer.h:39

◆ ~EventServer()

Definition at line 29 of file EventServer.cc.

30{
31 delete m_rbuf;
32 delete m_sock;
33 delete m_man;
34}

Member Function Documentation

◆ server()

int server ( )

Definition at line 36 of file EventServer.cc.

37{
38 SocketIO sio;
39 MsgHandler msghdl(0);
40 char* evtbuffer = new char[MAXEVTSIZE];
41
42 // vector<int> recvsock;
43 int loop_counter [[maybe_unused]] = 0;
44 while (m_force_exit == 0) {
45 // Pick up a event from RingBuffer (non blocking)
46 int size = m_rbuf->remq((int*)evtbuffer);
47 // if ( size > 0 )
48 // printf ( "From RB : event size = %d\n", size );
49
50 // Check connection request
51 int exam_stat = m_man->examine();
52 // printf("Examine: exam_stat = %d\n", exam_stat);
53 if (exam_stat == 0) {
54 printf("Initial connection request detected!\n");
55 // int fd = recvsock[;
56 } else if (exam_stat == 1 && size > 0) { //
57 // printf ( "Event data data ready on socket\n" );
58 vector<int>& recvsock = m_man->connected_socket_list();
59 // printf ( "size of recvsock = %d\n", recvsock.size() );
60 for (vector<int>::iterator it = recvsock.begin();
61 it != recvsock.end(); ++it) {
62 int fd = *it;
63 if (m_man->connected(fd, true)) {
64 int is = sio.put(fd, evtbuffer, size * 4);
65 // printf ( "data put on socket : %d\n", is );
66 if (is <= 0) {
67 printf("EventServer: fd %d disconnected\n", fd);
68 m_man->remove(fd);
69 break;
70 }
71 }
72 }
73 }
74 usleep(1000);
75 loop_counter++;
76 }
77 return 0;
78}
A class to encode/decode an EvtMessage.
Definition: MsgHandler.h:103
int remq(int *buf)
Pick up a buffer from the RingBuffer.
Definition: RingBuffer.cc:308

Member Data Documentation

◆ m_force_exit

int m_force_exit
private

Definition at line 37 of file EventServer.h.

◆ m_man

EvtSocketManager* m_man
private

Definition at line 34 of file EventServer.h.

◆ m_port

int m_port
private

Definition at line 36 of file EventServer.h.

◆ m_rbuf

RingBuffer* m_rbuf
private

Definition at line 35 of file EventServer.h.

◆ m_sock

EvtSocketRecv* m_sock
private

Definition at line 33 of file EventServer.h.


The documentation for this class was generated from the following files: