SNode.C
Loading...
Searching...
No Matches
core::DescriptorEventPublisher Class Referenceabstract

#include <DescriptorEventPublisher.h>

Inheritance diagram for core::DescriptorEventPublisher:
Collaboration diagram for core::DescriptorEventPublisher:

Public Member Functions

 DescriptorEventPublisher ()=delete
 
virtual ~DescriptorEventPublisher ()
 
 DescriptorEventPublisher (const DescriptorEventPublisher &)=delete
 
DescriptorEventPublisheroperator= (const DescriptorEventPublisher &)=delete
 
void enable (DescriptorEventReceiver *descriptorEventReceiver)
 
void disable (DescriptorEventReceiver *descriptorEventReceiver)
 
void suspend (DescriptorEventReceiver *descriptorEventReceiver)
 
void resume (DescriptorEventReceiver *descriptorEventReceiver)
 
virtual void spanActiveEvents ()=0
 
void checkTimedOutEvents (const utils::Timeval &currentTime)
 
void releaseDisabledEvents (const utils::Timeval &currentTime)
 
int getObservedEventReceiverCount () const
 
int maxFd () const
 
utils::Timeval getNextTimeout (const utils::Timeval &currentTime) const
 
void signal (int sigNum)
 
void disable ()
 
const std::string & getName () const
 

Protected Member Functions

 DescriptorEventPublisher (std::string name)
 

Protected Attributes

std::map< int, std::list< DescriptorEventReceiver * > > observedEventReceiverLists
 
unsigned long eventCounter = 0
 

Private Member Functions

virtual void muxAdd (DescriptorEventReceiver *descriptorEventReceiver)=0
 
virtual void muxDel (int fd)=0
 
virtual void muxOn (DescriptorEventReceiver *descriptorEventReceiver)=0
 
virtual void muxOff (DescriptorEventReceiver *descriptorEventReceiver)=0
 

Private Attributes

std::string name
 
std::map< std::list< DescriptorEventReceiver * > *, std::list< DescriptorEventReceiver * > > dirtyEventReceiverLists
 

Detailed Description

Definition at line 41 of file DescriptorEventPublisher.h.

Constructor & Destructor Documentation

◆ DescriptorEventPublisher() [1/3]

core::DescriptorEventPublisher::DescriptorEventPublisher ( std::string name)
protected

Definition at line 36 of file DescriptorEventPublisher.cpp.

37 : name(std::move(name)) {
38 }

References name.

◆ DescriptorEventPublisher() [2/3]

core::DescriptorEventPublisher::DescriptorEventPublisher ( )
delete

◆ ~DescriptorEventPublisher()

core::DescriptorEventPublisher::~DescriptorEventPublisher ( )
virtual

Definition at line 40 of file DescriptorEventPublisher.cpp.

40 {
41 }

◆ DescriptorEventPublisher() [3/3]

core::DescriptorEventPublisher::DescriptorEventPublisher ( const DescriptorEventPublisher & )
delete

Member Function Documentation

◆ checkTimedOutEvents()

void core::DescriptorEventPublisher::checkTimedOutEvents ( const utils::Timeval & currentTime)

Definition at line 68 of file DescriptorEventPublisher.cpp.

68 {
69 for (auto& [fd, eventReceivers] : observedEventReceiverLists) {
70 eventReceivers.front()->checkTimeout(currentTime);
71 }
72 }
std::map< int, std::list< DescriptorEventReceiver * > > observedEventReceiverLists

◆ disable() [1/2]

void core::DescriptorEventPublisher::disable ( )

Definition at line 138 of file DescriptorEventPublisher.cpp.

138 {
139 for (auto& [fd, eventReceivers] : observedEventReceiverLists) {
140 for (DescriptorEventReceiver* eventReceiver : eventReceivers) {
141 eventReceiver->disable();
142 }
143 }
144 }

◆ disable() [2/2]

void core::DescriptorEventPublisher::disable ( DescriptorEventReceiver * descriptorEventReceiver)

Definition at line 54 of file DescriptorEventPublisher.cpp.

54 {
55 const int fd = descriptorEventReceiver->getRegisteredFd();
56
57 dirtyEventReceiverLists[&observedEventReceiverLists[fd]].push_back(descriptorEventReceiver);
58 }
std::map< std::list< DescriptorEventReceiver * > *, std::list< DescriptorEventReceiver * > > dirtyEventReceiverLists

References core::DescriptorEventReceiver::getRegisteredFd().

Here is the call graph for this function:

◆ enable()

void core::DescriptorEventPublisher::enable ( DescriptorEventReceiver * descriptorEventReceiver)

Definition at line 43 of file DescriptorEventPublisher.cpp.

43 {
44 const int fd = descriptorEventReceiver->getRegisteredFd();
45
46 observedEventReceiverLists[fd].push_front(descriptorEventReceiver);
47 muxAdd(descriptorEventReceiver);
48 if (descriptorEventReceiver->isSuspended()) {
49 muxOff(descriptorEventReceiver);
50 }
51 descriptorEventReceiver->setEnabled(utils::Timeval::currentTime());
52 }
virtual void muxAdd(DescriptorEventReceiver *descriptorEventReceiver)=0
virtual void muxOff(DescriptorEventReceiver *descriptorEventReceiver)=0
static Timeval currentTime()
Definition Timeval.cpp:54

References utils::Timeval::currentTime(), core::DescriptorEventReceiver::getRegisteredFd(), core::DescriptorEventReceiver::isSuspended(), muxAdd(), muxOff(), and core::DescriptorEventReceiver::setEnabled().

Here is the call graph for this function:

◆ getName()

const std::string & core::DescriptorEventPublisher::getName ( ) const

Definition at line 146 of file DescriptorEventPublisher.cpp.

146 {
147 return name;
148 }

References name.

◆ getNextTimeout()

utils::Timeval core::DescriptorEventPublisher::getNextTimeout ( const utils::Timeval & currentTime) const

Definition at line 116 of file DescriptorEventPublisher.cpp.

116 {
118
119 if (dirtyEventReceiverLists.empty()) {
120 for (const auto& [fd, eventReceivers] : observedEventReceiverLists) {
121 nextTimeout = std::min(eventReceivers.front()->getTimeout(currentTime), nextTimeout);
122 }
123 } else {
124 nextTimeout = 0;
125 }
126
127 return nextTimeout;
128 }

References core::DescriptorEventReceiver::TIMEOUT::MAX, and utils::Timeval::operator=().

Here is the call graph for this function:

◆ getObservedEventReceiverCount()

int core::DescriptorEventPublisher::getObservedEventReceiverCount ( ) const

Definition at line 102 of file DescriptorEventPublisher.cpp.

102 {
103 return static_cast<int>(observedEventReceiverLists.size());
104 }

◆ maxFd()

int core::DescriptorEventPublisher::maxFd ( ) const

Definition at line 106 of file DescriptorEventPublisher.cpp.

106 {
107 int maxFd = -1;
108
109 if (!observedEventReceiverLists.empty()) {
110 maxFd = observedEventReceiverLists.rbegin()->first;
111 }
112
113 return maxFd;
114 }

◆ muxAdd()

virtual void core::DescriptorEventPublisher::muxAdd ( DescriptorEventReceiver * descriptorEventReceiver)
privatepure virtual

Implemented in core::multiplexer::epoll::DescriptorEventPublisher, core::multiplexer::poll::DescriptorEventPublisher, and core::multiplexer::select::DescriptorEventPublisher.

Referenced by enable().

Here is the caller graph for this function:

◆ muxDel()

virtual void core::DescriptorEventPublisher::muxDel ( int fd)
privatepure virtual

◆ muxOff()

virtual void core::DescriptorEventPublisher::muxOff ( DescriptorEventReceiver * descriptorEventReceiver)
privatepure virtual

Implemented in core::multiplexer::epoll::DescriptorEventPublisher, core::multiplexer::poll::DescriptorEventPublisher, and core::multiplexer::select::DescriptorEventPublisher.

Referenced by enable(), and suspend().

Here is the caller graph for this function:

◆ muxOn()

virtual void core::DescriptorEventPublisher::muxOn ( DescriptorEventReceiver * descriptorEventReceiver)
privatepure virtual

Implemented in core::multiplexer::epoll::DescriptorEventPublisher, core::multiplexer::poll::DescriptorEventPublisher, and core::multiplexer::select::DescriptorEventPublisher.

Referenced by resume().

Here is the caller graph for this function:

◆ operator=()

DescriptorEventPublisher & core::DescriptorEventPublisher::operator= ( const DescriptorEventPublisher & )
delete

◆ releaseDisabledEvents()

void core::DescriptorEventPublisher::releaseDisabledEvents ( const utils::Timeval & currentTime)

Definition at line 74 of file DescriptorEventPublisher.cpp.

74 {
75 for (auto& [dirtyDescriptEventReceiverList, disabledDescriptorEventReceivers] : dirtyEventReceiverLists) {
76 for (DescriptorEventReceiver* disabledDescriptorEventReceiver : disabledDescriptorEventReceivers) {
77 dirtyDescriptEventReceiverList->remove(disabledDescriptorEventReceiver);
78
79 if (dirtyDescriptEventReceiverList->empty()) {
80 const int fd = disabledDescriptorEventReceiver->getRegisteredFd();
81
82 muxDel(fd);
84 } else {
85 DescriptorEventReceiver* activeDescriptorEventReceiver = dirtyDescriptEventReceiverList->front();
86
87 activeDescriptorEventReceiver->triggered(currentTime);
88 if (!activeDescriptorEventReceiver->isSuspended()) {
89 muxOn(activeDescriptorEventReceiver);
90 } else {
91 muxOff(activeDescriptorEventReceiver);
92 }
93 }
94
95 disabledDescriptorEventReceiver->setDisabled();
96 }
97 }
98
100 }
virtual void muxDel(int fd)=0
virtual void muxOn(DescriptorEventReceiver *descriptorEventReceiver)=0

◆ resume()

void core::DescriptorEventPublisher::resume ( DescriptorEventReceiver * descriptorEventReceiver)

Definition at line 64 of file DescriptorEventPublisher.cpp.

64 {
65 muxOn(descriptorEventReceiver);
66 }

References muxOn().

Here is the call graph for this function:

◆ signal()

void core::DescriptorEventPublisher::signal ( int sigNum)

Definition at line 130 of file DescriptorEventPublisher.cpp.

130 {
131 for (auto& [fd, eventReceivers] : observedEventReceiverLists) {
132 for (DescriptorEventReceiver* eventReceiver : eventReceivers) {
133 eventReceiver->onSignal(sigNum);
134 }
135 }
136 }

◆ spanActiveEvents()

virtual void core::DescriptorEventPublisher::spanActiveEvents ( )
pure virtual

◆ suspend()

void core::DescriptorEventPublisher::suspend ( DescriptorEventReceiver * descriptorEventReceiver)

Definition at line 60 of file DescriptorEventPublisher.cpp.

60 {
61 muxOff(descriptorEventReceiver);
62 }

References muxOff().

Here is the call graph for this function:

Member Data Documentation

◆ dirtyEventReceiverLists

std::map<std::list<DescriptorEventReceiver*>*, std::list<DescriptorEventReceiver*> > core::DescriptorEventPublisher::dirtyEventReceiverLists
private

Definition at line 84 of file DescriptorEventPublisher.h.

◆ eventCounter

unsigned long core::DescriptorEventPublisher::eventCounter = 0
protected

◆ name

std::string core::DescriptorEventPublisher::name
private

Definition at line 83 of file DescriptorEventPublisher.h.

Referenced by DescriptorEventPublisher(), and getName().

◆ observedEventReceiverLists

std::map<int, std::list<DescriptorEventReceiver*> > core::DescriptorEventPublisher::observedEventReceiverLists
protected

Definition at line 74 of file DescriptorEventPublisher.h.


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