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)

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

◆ disable()

void core::DescriptorEventReceiver::disable ( )
protected

Definition at line 108 of file DescriptorEventReceiver.cpp.

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

Referenced by core::eventreceiver::AcceptEventReceiver::acceptTimeout(), core::eventreceiver::ConnectEventReceiver::connectTimeout(), 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::tls::TLSHandshake::TLSHandshake(), core::socket::stream::tls::TLSShutdown::TLSShutdown(), 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 caller graph for this function:

◆ dispatchEvent()

◆ 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;
94 LOG(TRACE) << getName() << ": Enabled";
95 } else {
96 LOG(WARNING) << getName() << ": Double enable";
97 }
98
99 return enabled;
100 }
void enable(DescriptorEventReceiver *descriptorEventReceiver)

Referenced by core::pipe::PipeSink::PipeSink(), core::pipe::PipeSource::PipeSource(), core::socket::stream::tls::TLSHandshake::TLSHandshake(), and core::socket::stream::tls::TLSShutdown::TLSShutdown().

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 }

◆ isEnabled()

bool core::DescriptorEventReceiver::isEnabled ( ) const

Definition at line 122 of file DescriptorEventReceiver.cpp.

122 {
123 return enabled;
124 }

◆ isSuspended()

bool core::DescriptorEventReceiver::isSuspended ( ) const

Definition at line 153 of file DescriptorEventReceiver.cpp.

153 {
154 return suspended;
155 }

Referenced by core::socket::stream::SocketReader::doRead(), core::DescriptorEventPublisher::enable(), and core::pipe::PipeSource::send().

Here is the caller graph for this function:

◆ 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

◆ 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

◆ resume()

void core::DescriptorEventReceiver::resume ( )
protected

Definition at line 139 of file DescriptorEventReceiver.cpp.

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

Referenced by core::socket::stream::SocketReader::doRead(), core::socket::stream::tls::TLSHandshake::readEvent(), core::socket::stream::tls::TLSShutdown::readEvent(), core::pipe::PipeSource::send(), 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 caller graph for this function:

◆ setDisabled()

void core::DescriptorEventReceiver::setDisabled ( )
private

Definition at line 118 of file DescriptorEventReceiver.cpp.

118 {
119 unObserved();
120 }

◆ 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 }

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

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 }

Referenced by core::socket::stream::SocketReader::shutdownRead().

Here is the caller graph for this function:

◆ signalEvent()

◆ suspend()

void core::DescriptorEventReceiver::suspend ( )
protected

Definition at line 126 of file DescriptorEventReceiver.cpp.

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

Referenced by core::socket::stream::SocketReader::doRead(), 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 caller graph for this function:

◆ timeoutEvent()

◆ triggered()

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

Definition at line 182 of file DescriptorEventReceiver.cpp.

182 {
183 lastTriggered = currentTime;
184 }

Friends And Related Symbol Documentation

◆ 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.

◆ enabled

bool core::DescriptorEventReceiver::enabled = false
private

Definition at line 127 of file DescriptorEventReceiver.h.

◆ eventCounter

int core::DescriptorEventReceiver::eventCounter = 0
private

Definition at line 134 of file DescriptorEventReceiver.h.

◆ initialTimeout

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

Definition at line 132 of file DescriptorEventReceiver.h.

◆ lastTriggered

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

Definition at line 130 of file DescriptorEventReceiver.h.

◆ maxInactivity

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

Definition at line 131 of file DescriptorEventReceiver.h.

◆ observedFd

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

Definition at line 125 of file DescriptorEventReceiver.h.

◆ suspended

bool core::DescriptorEventReceiver::suspended = false
private

Definition at line 128 of file DescriptorEventReceiver.h.


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