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

#include <DescriptorEventReceiver.h>

Inheritance diagram for core::DescriptorEventReceiver:
Collaboration diagram for core::DescriptorEventReceiver:

Classes

struct  TIMEOUT

Public Member Functions

int getRegisteredFd () const
bool isEnabled () const
bool isSuspended () const
Public Member Functions inherited from core::EventReceiver
 EventReceiver (const std::string &name)
 EventReceiver (EventReceiver &)=delete
 EventReceiver (EventReceiver &&)=delete
EventReceiveroperator= (EventReceiver &)=delete
EventReceiveroperator= (EventReceiver &&)=delete
virtual void destruct ()
void span ()
void relax ()
const std::string & getName () const

Protected Member Functions

 DescriptorEventReceiver (const std::string &name, DescriptorEventPublisher &descriptorEventPublisher, const utils::Timeval &timeout=TIMEOUT::DISABLE)
bool enable (int fd)
void disable ()
void suspend ()
void resume ()
void setTimeout (const utils::Timeval &timeout)
utils::Timeval getTimeout (const utils::Timeval &currentTime) const
void checkTimeout (const utils::Timeval &currentTime)
Protected Member Functions inherited from core::Observer
void observed ()
void unObserved ()
virtual void unobservedEvent ()=0
 Observer ()=default
 Observer (Observer &)=delete
 Observer (Observer &&)=delete
virtual ~Observer ()
Protected Member Functions inherited from core::EventReceiver
virtual ~EventReceiver ()=default
 EventReceiver (const std::string &name)
 EventReceiver (EventReceiver &)=delete
 EventReceiver (EventReceiver &&)=delete
EventReceiveroperator= (EventReceiver &)=delete
EventReceiveroperator= (EventReceiver &&)=delete
virtual void destruct ()
void span ()
void relax ()
const std::string & getName () const

Private Member Functions

void onEvent (const utils::Timeval &currentTime) final
void onSignal (int signum)
void triggered (const utils::Timeval &currentTime)
void setEnabled (const utils::Timeval &currentTime)
void setDisabled ()
virtual void dispatchEvent ()=0
virtual void timeoutEvent ()=0
virtual void signalEvent (int signum)=0

Private Attributes

DescriptorEventPublisherdescriptorEventPublisher
int observedFd = -1
bool enabled = false
bool suspended = false
utils::Timeval lastTriggered
utils::Timeval maxInactivity
const utils::Timeval initialTimeout
int eventCounter = 0

Friends

class DescriptorEventPublisher

Additional Inherited Members

Static Public Member Functions inherited from core::EventReceiver
static void atNextTick (const std::function< void(void)> &callBack)
Static Protected Member Functions inherited from core::EventReceiver
static void atNextTick (const std::function< void(void)> &callBack)

Detailed Description

Definition at line 79 of file DescriptorEventReceiver.h.

Constructor & Destructor Documentation

◆ DescriptorEventReceiver()

core::DescriptorEventReceiver::DescriptorEventReceiver ( const std::string & name,
DescriptorEventPublisher & descriptorEventPublisher,
const utils::Timeval & timeout = TIMEOUT::DISABLE )
protected

Definition at line 75 of file DescriptorEventReceiver.cpp.

78 : EventReceiver(name)
80 , maxInactivity(timeout)
81 , initialTimeout(timeout) {
82 }
DescriptorEventPublisher & descriptorEventPublisher
EventReceiver(const std::string &name)

References descriptorEventPublisher, core::EventReceiver::EventReceiver(), initialTimeout, maxInactivity, and utils::Timeval::Timeval().

Referenced by core::eventreceiver::AcceptEventReceiver::AcceptEventReceiver(), core::eventreceiver::ConnectEventReceiver::ConnectEventReceiver(), core::eventreceiver::ExceptionalConditionEventReceiver::ExceptionalConditionEventReceiver(), core::eventreceiver::ReadEventReceiver::ReadEventReceiver(), and core::eventreceiver::WriteEventReceiver::WriteEventReceiver().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Function Documentation

◆ checkTimeout()

void core::DescriptorEventReceiver::checkTimeout ( const utils::Timeval & currentTime)
protected

Definition at line 161 of file DescriptorEventReceiver.cpp.

161 {
162 if (maxInactivity > 0 && currentTime - lastTriggered >= maxInactivity) {
163 timeoutEvent();
164 }
165 }
virtual void timeoutEvent()=0

References lastTriggered, maxInactivity, utils::Timeval::operator-(), utils::Timeval::operator>(), utils::Timeval::operator>=(), and timeoutEvent().

Referenced by core::DescriptorEventPublisher::checkTimedOutEvents().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ disable()

void core::DescriptorEventReceiver::disable ( )
protected

Definition at line 110 of file DescriptorEventReceiver.cpp.

110 {
111 if (enabled) {
112 enabled = false;
113 descriptorEventPublisher.disable(this);
114 LOG(TRACE) << getName() << ": Disabled";
115 } else {
116 LOG(WARNING) << getName() << ": Double disable";
117 }
118 }
#define LOG(level)
Definition Logger.h:148
const std::string & getName() const

References descriptorEventPublisher, core::DescriptorEventPublisher::disable(), enabled, core::EventReceiver::getName(), logger::LogMessage::LogMessage(), logger::TRACE, and logger::WARNING.

Referenced by core::eventreceiver::AcceptEventReceiver::acceptTimeout(), database::mariadb::MariaDBConnection::commandContinue(), database::mariadb::MariaDBConnection::commandStart(), core::socket::stream::SocketConnector< PhysicalSocketClientT, ConfigT, SocketConnectionT >::connectEvent(), core::eventreceiver::ConnectEventReceiver::connectTimeout(), core::DescriptorEventPublisher::disable(), core::pipe::PipeSource::eof(), core::eventreceiver::ExceptionalConditionEventReceiver::outOfBandTimeout(), core::pipe::PipeSink::readEvent(), core::socket::stream::tls::TLSHandshake::readEvent(), core::socket::stream::tls::TLSShutdown::readEvent(), core::eventreceiver::ReadEventReceiver::readTimeout(), core::socket::stream::tls::TLSHandshake::readTimeout(), core::socket::stream::tls::TLSShutdown::readTimeout(), core::eventreceiver::AcceptEventReceiver::signalEvent(), core::eventreceiver::ConnectEventReceiver::signalEvent(), core::eventreceiver::ExceptionalConditionEventReceiver::signalEvent(), core::eventreceiver::ReadEventReceiver::signalEvent(), core::eventreceiver::WriteEventReceiver::signalEvent(), core::socket::stream::SocketWriter::signalEvent(), core::eventreceiver::ConnectEventReceiver::stopConnect(), core::eventreceiver::AcceptEventReceiver::stopListen(), core::socket::stream::tls::TLSHandshake::TLSHandshake(), core::socket::stream::tls::TLSShutdown::TLSShutdown(), database::mariadb::MariaDBConnection::unmanaged(), core::pipe::PipeSource::writeEvent(), core::socket::stream::tls::TLSHandshake::writeEvent(), core::socket::stream::tls::TLSShutdown::writeEvent(), core::eventreceiver::WriteEventReceiver::writeTimeout(), core::socket::stream::tls::TLSHandshake::writeTimeout(), and core::socket::stream::tls::TLSShutdown::writeTimeout().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ dispatchEvent()

virtual void core::DescriptorEventReceiver::dispatchEvent ( )
privatepure virtual

Implemented in core::eventreceiver::AcceptEventReceiver, core::eventreceiver::ConnectEventReceiver, core::eventreceiver::ExceptionalConditionEventReceiver, core::eventreceiver::ReadEventReceiver, and core::eventreceiver::WriteEventReceiver.

Referenced by onEvent().

Here is the caller graph for this function:

◆ enable()

bool core::DescriptorEventReceiver::enable ( int fd)
protected

Definition at line 96 of file DescriptorEventReceiver.cpp.

96 {
97 if (!enabled) {
98 observedFd = fd;
99
100 enabled = true;
101 descriptorEventPublisher.enable(this);
102 LOG(TRACE) << getName() << ": Enabled";
103 } else {
104 LOG(WARNING) << getName() << ": Double enable";
105 }
106
107 return enabled;
108 }

References descriptorEventPublisher, core::DescriptorEventPublisher::enable(), enabled, core::EventReceiver::getName(), logger::LogMessage::LogMessage(), observedFd, logger::TRACE, and logger::WARNING.

Referenced by core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::init(), core::socket::stream::SocketConnector< PhysicalSocketClientT, ConfigT, SocketConnectionT >::init(), apps::towercalculator::KeyboardReader::KeyboardReader(), core::pipe::PipeSink::PipeSink(), core::pipe::PipeSource::PipeSource(), core::socket::stream::tls::TLSHandshake::TLSHandshake(), and core::socket::stream::tls::TLSShutdown::TLSShutdown().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getRegisteredFd()

◆ getTimeout()

utils::Timeval core::DescriptorEventReceiver::getTimeout ( const utils::Timeval & currentTime) const
protected

Definition at line 157 of file DescriptorEventReceiver.cpp.

157 {
158 return maxInactivity > 0 ? currentTime > lastTriggered ? maxInactivity - (currentTime - lastTriggered) : 0 : TIMEOUT::MAX;
159 }

References lastTriggered, core::DescriptorEventReceiver::TIMEOUT::MAX, maxInactivity, utils::Timeval::operator-(), and utils::Timeval::operator>().

Referenced by core::DescriptorEventPublisher::getNextTimeout().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ isEnabled()

◆ isSuspended()

bool core::DescriptorEventReceiver::isSuspended ( ) const

◆ onEvent()

void core::DescriptorEventReceiver::onEvent ( const utils::Timeval & currentTime)
finalprivatevirtual

Implements core::EventReceiver.

Definition at line 167 of file DescriptorEventReceiver.cpp.

167 {
168 eventCounter++;
169 triggered(currentTime);
170
172 }
void triggered(const utils::Timeval &currentTime)
virtual void dispatchEvent()=0

References dispatchEvent(), eventCounter, and triggered().

Here is the call graph for this function:

◆ onSignal()

void core::DescriptorEventReceiver::onSignal ( int signum)
private

Definition at line 174 of file DescriptorEventReceiver.cpp.

174 {
175 signalEvent(signum);
176 }
virtual void signalEvent(int signum)=0

References signalEvent().

Referenced by core::DescriptorEventPublisher::signal().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ resume()

void core::DescriptorEventReceiver::resume ( )
protected

Definition at line 133 of file DescriptorEventReceiver.cpp.

133 {
134 if (enabled) {
135 if (suspended) {
136 suspended = false;
138 descriptorEventPublisher.resume(this);
139 } else {
140 LOG(WARNING) << getName() << ": Double resume";
141 }
142 } else {
143 LOG(WARNING) << getName() << ": Resume while not enabled";
144 }
145 }
static Timeval currentTime()
Definition Timeval.cpp:76

References utils::Timeval::currentTime(), descriptorEventPublisher, enabled, core::EventReceiver::getName(), lastTriggered, logger::LogMessage::LogMessage(), utils::Timeval::operator=(), core::DescriptorEventPublisher::resume(), suspended, and logger::WARNING.

Referenced by database::mariadb::MariaDBConnection::checkStatus(), database::mariadb::MariaDBConnection::commandStart(), core::socket::stream::SocketReader::doRead(), core::socket::stream::SocketWriter::doWrite(), core::socket::stream::tls::TLSHandshake::readEvent(), core::socket::stream::tls::TLSShutdown::readEvent(), core::pipe::PipeSource::send(), core::socket::stream::SocketWriter::sendToPeer(), core::socket::stream::tls::TLSHandshake::TLSHandshake(), core::socket::stream::tls::TLSShutdown::TLSShutdown(), core::socket::stream::tls::TLSHandshake::writeEvent(), and core::socket::stream::tls::TLSShutdown::writeEvent().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setDisabled()

void core::DescriptorEventReceiver::setDisabled ( )
private

Definition at line 188 of file DescriptorEventReceiver.cpp.

188 {
189 unObserved();
190 }

References core::Observer::unObserved().

Referenced by core::DescriptorEventPublisher::releaseDisabledEvents().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setEnabled()

void core::DescriptorEventReceiver::setEnabled ( const utils::Timeval & currentTime)
private

Definition at line 182 of file DescriptorEventReceiver.cpp.

182 {
183 lastTriggered = currentTime;
184
185 observed();
186 }

References lastTriggered, core::Observer::observed(), and utils::Timeval::operator=().

Referenced by core::DescriptorEventPublisher::enable().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ setTimeout()

void core::DescriptorEventReceiver::setTimeout ( const utils::Timeval & timeout)
protected

Definition at line 147 of file DescriptorEventReceiver.cpp.

147 {
148 if (timeout == TIMEOUT::DEFAULT) {
150 } else {
151 this->maxInactivity = timeout;
152 }
153
155 }

References utils::Timeval::currentTime(), core::DescriptorEventReceiver::TIMEOUT::DEFAULT, initialTimeout, maxInactivity, utils::Timeval::operator=(), utils::Timeval::operator==(), and triggered().

Referenced by database::mariadb::MariaDBConnection::checkStatus(), core::socket::stream::SocketAcceptor< PhysicalSocketServerT, ConfigT, SocketConnectionT >::init(), core::socket::stream::SocketConnector< PhysicalSocketClientT, ConfigT, SocketConnectionT >::init(), and core::socket::stream::SocketReader::shutdownRead().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ signalEvent()

virtual void core::DescriptorEventReceiver::signalEvent ( int signum)
privatepure virtual

◆ suspend()

void core::DescriptorEventReceiver::suspend ( )
protected

Definition at line 120 of file DescriptorEventReceiver.cpp.

120 {
121 if (enabled) {
122 if (!suspended) {
123 suspended = true;
124 descriptorEventPublisher.suspend(this);
125 } else {
126 LOG(WARNING) << getName() << ": Double suspend";
127 }
128 } else {
129 LOG(WARNING) << getName() << ": Suspend while not enabled";
130 }
131 }

References descriptorEventPublisher, enabled, core::EventReceiver::getName(), logger::LogMessage::LogMessage(), core::DescriptorEventPublisher::suspend(), suspended, and logger::WARNING.

Referenced by database::mariadb::MariaDBConnection::checkStatus(), core::socket::stream::SocketReader::doRead(), core::socket::stream::SocketWriter::doWrite(), core::pipe::PipeSource::PipeSource(), core::socket::stream::tls::TLSHandshake::readEvent(), core::socket::stream::tls::TLSShutdown::readEvent(), core::socket::stream::tls::TLSHandshake::TLSHandshake(), core::socket::stream::tls::TLSShutdown::TLSShutdown(), core::pipe::PipeSource::writeEvent(), core::socket::stream::tls::TLSHandshake::writeEvent(), and core::socket::stream::tls::TLSShutdown::writeEvent().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ timeoutEvent()

virtual void core::DescriptorEventReceiver::timeoutEvent ( )
privatepure virtual

Implemented in core::eventreceiver::AcceptEventReceiver, core::eventreceiver::ConnectEventReceiver, core::eventreceiver::ExceptionalConditionEventReceiver, core::eventreceiver::ReadEventReceiver, and core::eventreceiver::WriteEventReceiver.

Referenced by checkTimeout().

Here is the caller graph for this function:

◆ triggered()

void core::DescriptorEventReceiver::triggered ( const utils::Timeval & currentTime)
private

Definition at line 178 of file DescriptorEventReceiver.cpp.

178 {
179 lastTriggered = currentTime;
180 }

References lastTriggered, and utils::Timeval::operator=().

Referenced by onEvent(), core::DescriptorEventPublisher::releaseDisabledEvents(), and setTimeout().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ DescriptorEventPublisher

friend class DescriptorEventPublisher
friend

Definition at line 137 of file DescriptorEventReceiver.h.

Member Data Documentation

◆ descriptorEventPublisher

DescriptorEventPublisher& core::DescriptorEventReceiver::descriptorEventPublisher
private

Definition at line 124 of file DescriptorEventReceiver.h.

Referenced by DescriptorEventReceiver(), disable(), enable(), resume(), and suspend().

◆ enabled

bool core::DescriptorEventReceiver::enabled = false
private

Definition at line 128 of file DescriptorEventReceiver.h.

Referenced by disable(), enable(), isEnabled(), resume(), and suspend().

◆ eventCounter

int core::DescriptorEventReceiver::eventCounter = 0
private

Definition at line 135 of file DescriptorEventReceiver.h.

Referenced by onEvent().

◆ initialTimeout

const utils::Timeval core::DescriptorEventReceiver::initialTimeout
private

Definition at line 133 of file DescriptorEventReceiver.h.

Referenced by DescriptorEventReceiver(), and setTimeout().

◆ lastTriggered

utils::Timeval core::DescriptorEventReceiver::lastTriggered
private

Definition at line 131 of file DescriptorEventReceiver.h.

Referenced by checkTimeout(), getTimeout(), resume(), setEnabled(), and triggered().

◆ maxInactivity

utils::Timeval core::DescriptorEventReceiver::maxInactivity
private

◆ observedFd

int core::DescriptorEventReceiver::observedFd = -1
private

Definition at line 126 of file DescriptorEventReceiver.h.

Referenced by enable(), and getRegisteredFd().

◆ suspended

bool core::DescriptorEventReceiver::suspended = false
private

Definition at line 129 of file DescriptorEventReceiver.h.

Referenced by isSuspended(), resume(), and suspend().


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