SNode.C
Loading...
Searching...
No Matches
core::multiplexer::epoll::EventMultiplexer Class Reference

#include <EventMultiplexer.h>

Inheritance diagram for core::multiplexer::epoll::EventMultiplexer:
Collaboration diagram for core::multiplexer::epoll::EventMultiplexer:

Public Member Functions

 EventMultiplexer ()
 ~EventMultiplexer () override=default
Public Member Functions inherited from core::EventMultiplexer
 EventMultiplexer (DescriptorEventPublisher *readDescriptorEventPublisher, DescriptorEventPublisher *writeDescriptorEventPublisher, DescriptorEventPublisher *exceptionDescriptorEventPublisher)
 EventMultiplexer (const EventMultiplexer &)=delete
EventMultiplexeroperator= (const EventMultiplexer &)=delete
DescriptorEventPublishergetDescriptorEventPublisher (DISP_TYPE dispType)
TimerEventPublishergetTimerEventPublisher ()
void span (core::Event *event)
void relax (core::Event *event)
void signal (int sigNum)
void terminate ()
void clearEventQueue ()
TickStatus tick (const utils::Timeval &tickTimeOut, const sigset_t &sigMask)

Private Member Functions

int monitorDescriptors (utils::Timeval &tickTimeout, const sigset_t &sigMask) override
void spanActiveEvents (int activeDescriptorCount) override

Private Attributes

int epfd
int epfds [3]
epoll_event ePollEvents [3] {}

Additional Inherited Members

Public Types inherited from core::EventMultiplexer
enum  DISP_TYPE { RD = 0 , WR = 1 , EX = 2 }
Protected Member Functions inherited from core::EventMultiplexer
int maxFd ()
Protected Attributes inherited from core::EventMultiplexer
std::array< DescriptorEventPublisher *, 3 > descriptorEventPublishers

Detailed Description

Definition at line 55 of file EventMultiplexer.h.

Constructor & Destructor Documentation

◆ EventMultiplexer()

core::multiplexer::epoll::EventMultiplexer::EventMultiplexer ( )

Definition at line 63 of file EventMultiplexer.cpp.

64 : core::EventMultiplexer(new core::multiplexer::epoll::DescriptorEventPublisher("READ", //
66 EPOLLIN,
67 EPOLLIN | EPOLLHUP | EPOLLRDHUP | EPOLLERR),
68 new core::multiplexer::epoll::DescriptorEventPublisher("WRITE", //
70 EPOLLOUT,
71 EPOLLOUT),
72 new core::multiplexer::epoll::DescriptorEventPublisher("EXCEPT", //
74 EPOLLPRI,
75 EPOLLPRI))
76 , epfd(core::system::epoll_create1(EPOLL_CLOEXEC)) {
77 epoll_event event{};
78 event.events = EPOLLIN;
79
82
85
88
89 LOG(DEBUG) << "Core::multiplexer: epoll";
90 }
std::array< DescriptorEventPublisher *, 3 > descriptorEventPublishers
int epoll_create1(int flags)
Definition epoll.cpp:52
int epoll_ctl(int epfd, int op, int fd, epoll_event *event)
Definition epoll.cpp:67

References core::multiplexer::epoll::DescriptorEventPublisher::DescriptorEventPublisher(), core::EventMultiplexer::descriptorEventPublishers, epfd, epfds, core::system::epoll_create1(), core::system::epoll_ctl(), core::EventMultiplexer::EventMultiplexer(), core::EventMultiplexer::EX, core::EventMultiplexer::RD, and core::EventMultiplexer::WR.

Here is the call graph for this function:

◆ ~EventMultiplexer()

core::multiplexer::epoll::EventMultiplexer::~EventMultiplexer ( )
overridevirtualdefault

Reimplemented from core::EventMultiplexer.

Member Function Documentation

◆ monitorDescriptors()

int core::multiplexer::epoll::EventMultiplexer::monitorDescriptors ( utils::Timeval & tickTimeout,
const sigset_t & sigMask )
overrideprivatevirtual

Implements core::EventMultiplexer.

Definition at line 92 of file EventMultiplexer.cpp.

92 {
93 return core::system::epoll_pwait(epfd, ePollEvents, 3, tickTimeout.getMs(), &sigMask);
94 }
int getMs() const
Definition Timeval.cpp:177
int epoll_pwait(int epfd, struct epoll_event *events, int maxevents, int timeout, const sigset_t *sigMask)
Definition epoll.cpp:62

References epfd, core::system::epoll_pwait(), ePollEvents, and utils::Timeval::getMs().

Here is the call graph for this function:

◆ spanActiveEvents()

void core::multiplexer::epoll::EventMultiplexer::spanActiveEvents ( int activeDescriptorCount)
overrideprivatevirtual

Implements core::EventMultiplexer.

Definition at line 96 of file EventMultiplexer.cpp.

96 {
97 for (int i = 0; i < activeDescriptorCount; i++) {
98 if ((ePollEvents[i].events & EPOLLIN) != 0) {
99 static_cast<core::DescriptorEventPublisher*>(ePollEvents[i].data.ptr)->spanActiveEvents();
100 }
101 }
102 }
void spanActiveEvents(int activeDescriptorCount) override

References ePollEvents, and core::DescriptorEventPublisher::spanActiveEvents().

Here is the call graph for this function:

Member Data Documentation

◆ epfd

int core::multiplexer::epoll::EventMultiplexer::epfd
private

Definition at line 64 of file EventMultiplexer.h.

Referenced by EventMultiplexer(), and monitorDescriptors().

◆ epfds

int core::multiplexer::epoll::EventMultiplexer::epfds[3]
private

Definition at line 66 of file EventMultiplexer.h.

Referenced by EventMultiplexer().

◆ ePollEvents

epoll_event core::multiplexer::epoll::EventMultiplexer::ePollEvents[3] {}
private

Definition at line 67 of file EventMultiplexer.h.

67{};

Referenced by monitorDescriptors(), and spanActiveEvents().


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