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 64 of file EventMultiplexer.cpp.

65 : core::EventMultiplexer(new core::multiplexer::epoll::DescriptorEventPublisher("READ", //
67 EPOLLIN,
68 EPOLLIN | EPOLLHUP | EPOLLRDHUP | EPOLLERR),
69 new core::multiplexer::epoll::DescriptorEventPublisher("WRITE", //
71 EPOLLOUT,
72 EPOLLOUT),
73 new core::multiplexer::epoll::DescriptorEventPublisher("EXCEPT", //
75 EPOLLPRI,
76 EPOLLPRI))
77 , epfd(core::system::epoll_create1(EPOLL_CLOEXEC)) {
78 epoll_event event{};
79 event.events = EPOLLIN;
80
83
86
89
90 LOG(DEBUG) << "Core::multiplexer: epoll";
91 }
#define LOG(level)
Definition Logger.h:148
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 logger::DEBUG, core::multiplexer::epoll::DescriptorEventPublisher::DescriptorEventPublisher(), core::EventMultiplexer::descriptorEventPublishers, epfd, epfds, core::system::epoll_create1(), core::system::epoll_ctl(), core::EventMultiplexer::EventMultiplexer(), core::EventMultiplexer::EX, logger::LogMessage::LogMessage(), 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 93 of file EventMultiplexer.cpp.

93 {
94 return core::system::epoll_pwait(epfd, ePollEvents, 3, tickTimeout.getMs(), &sigMask);
95 }
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 97 of file EventMultiplexer.cpp.

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