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

 DescriptorEventReceiver (const std::string &name, DescriptorEventPublisher &descriptorEventPublisher, const utils::Timeval &timeout=TIMEOUT::DISABLE)
int getRegisteredFd () const
bool isEnabled () const
bool isSuspended () const
void setTimeout (const utils::Timeval &timeout)
utils::Timeval getTimeout (const utils::Timeval &currentTime) const
void checkTimeout (const utils::Timeval &currentTime)
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

bool enable (int fd)
void disable ()
void suspend ()
void resume ()
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 )

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)

Definition at line 186 of file DescriptorEventReceiver.cpp.

186 {
187 if (maxInactivity > 0 && currentTime - lastTriggered >= maxInactivity) {
188 timeoutEvent();
189 }
190 }
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 108 of file DescriptorEventReceiver.cpp.

108 {
109 if (enabled) {
110 enabled = false;
111 descriptorEventPublisher.disable(this);
112 LOG(TRACE) << getName() << ": Disabled";
113 } else {
114 LOG(WARNING) << getName() << ": Double disable";
115 }
116 }
const std::string & getName() const

References descriptorEventPublisher, core::DescriptorEventPublisher::disable(), enabled, and core::EventReceiver::getName().

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::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 88 of file DescriptorEventReceiver.cpp.

88 {
89 if (!enabled) {
90 observedFd = fd;
91
92 enabled = true;
93 descriptorEventPublisher.enable(this);
94 LOG(TRACE) << getName() << ": Enabled";
95 } else {
96 LOG(WARNING) << getName() << ": Double enable";
97 }
98
99 return enabled;
100 }

References descriptorEventPublisher, core::DescriptorEventPublisher::enable(), enabled, core::EventReceiver::getName(), and observedFd.

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

Definition at line 167 of file DescriptorEventReceiver.cpp.

167 {
168 return maxInactivity > 0 ? currentTime > lastTriggered ? maxInactivity - (currentTime - lastTriggered) : 0 : TIMEOUT::MAX;
169 }

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 171 of file DescriptorEventReceiver.cpp.

171 {
172 eventCounter++;
173 triggered(currentTime);
174
176 }
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 178 of file DescriptorEventReceiver.cpp.

178 {
179 signalEvent(signum);
180 }
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 139 of file DescriptorEventReceiver.cpp.

139 {
140 if (enabled) {
141 if (suspended) {
142 suspended = false;
144 descriptorEventPublisher.resume(this);
145 } else {
146 LOG(WARNING) << getName() << ": Double resume";
147 }
148 } else {
149 LOG(WARNING) << getName() << ": Resume while not enabled";
150 }
151 }
static Timeval currentTime()
Definition Timeval.cpp:76

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

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 118 of file DescriptorEventReceiver.cpp.

118 {
119 unObserved();
120 }

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 102 of file DescriptorEventReceiver.cpp.

102 {
103 lastTriggered = currentTime;
104
105 observed();
106 }

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)

Definition at line 157 of file DescriptorEventReceiver.cpp.

157 {
158 if (timeout == TIMEOUT::DEFAULT) {
160 } else {
161 this->maxInactivity = timeout;
162 }
163
165 }

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 126 of file DescriptorEventReceiver.cpp.

126 {
127 if (enabled) {
128 if (!suspended) {
129 suspended = true;
130 descriptorEventPublisher.suspend(this);
131 } else {
132 LOG(WARNING) << getName() << ": Double suspend";
133 }
134 } else {
135 LOG(WARNING) << getName() << ": Suspend while not enabled";
136 }
137 }

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

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 182 of file DescriptorEventReceiver.cpp.

182 {
183 lastTriggered = currentTime;
184 }

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 136 of file DescriptorEventReceiver.h.

Member Data Documentation

◆ descriptorEventPublisher

DescriptorEventPublisher& core::DescriptorEventReceiver::descriptorEventPublisher
private

Definition at line 123 of file DescriptorEventReceiver.h.

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

◆ enabled

bool core::DescriptorEventReceiver::enabled = false
private

Definition at line 127 of file DescriptorEventReceiver.h.

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

◆ eventCounter

int core::DescriptorEventReceiver::eventCounter = 0
private

Definition at line 134 of file DescriptorEventReceiver.h.

Referenced by onEvent().

◆ initialTimeout

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

Definition at line 132 of file DescriptorEventReceiver.h.

Referenced by DescriptorEventReceiver(), and setTimeout().

◆ lastTriggered

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

Definition at line 130 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 125 of file DescriptorEventReceiver.h.

Referenced by enable(), and getRegisteredFd().

◆ suspended

bool core::DescriptorEventReceiver::suspended = false
private

Definition at line 128 of file DescriptorEventReceiver.h.

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


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