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

56 : EventReceiver(name)
58 , maxInactivity(timeout)
59 , initialTimeout(timeout) {
60 }
DescriptorEventPublisher & descriptorEventPublisher
EventReceiver(const std::string &name)

Member Function Documentation

◆ checkTimeout()

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

Definition at line 164 of file DescriptorEventReceiver.cpp.

164 {
165 if (maxInactivity > 0 && currentTime - lastTriggered >= maxInactivity) {
166 timeoutEvent();
167 }
168 }
virtual void timeoutEvent()=0

◆ disable()

void core::DescriptorEventReceiver::disable ( )
protected

Definition at line 86 of file DescriptorEventReceiver.cpp.

86 {
87 if (enabled) {
88 enabled = false;
90 LOG(TRACE) << getName() << ": Disabled";
91 } else {
92 LOG(WARNING) << getName() << ": Double disable";
93 }
94 }
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 66 of file DescriptorEventReceiver.cpp.

66 {
67 if (!enabled) {
68 observedFd = fd;
69
70 enabled = true;
72 LOG(TRACE) << getName() << ": Enabled";
73 } else {
74 LOG(WARNING) << getName() << ": Double enable";
75 }
76
77 return enabled;
78 }
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 145 of file DescriptorEventReceiver.cpp.

145 {
146 return maxInactivity > 0 ? currentTime > lastTriggered ? maxInactivity - (currentTime - lastTriggered) : 0 : TIMEOUT::MAX;
147 }

◆ isEnabled()

bool core::DescriptorEventReceiver::isEnabled ( ) const

Definition at line 100 of file DescriptorEventReceiver.cpp.

100 {
101 return enabled;
102 }

◆ isSuspended()

bool core::DescriptorEventReceiver::isSuspended ( ) const

Definition at line 131 of file DescriptorEventReceiver.cpp.

131 {
132 return suspended;
133 }

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

149 {
150 eventCounter++;
151 triggered(currentTime);
152
154 }
void triggered(const utils::Timeval &currentTime)
virtual void dispatchEvent()=0

◆ onSignal()

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

Definition at line 156 of file DescriptorEventReceiver.cpp.

156 {
157 signalEvent(signum);
158 }
virtual void signalEvent(int signum)=0

◆ resume()

void core::DescriptorEventReceiver::resume ( )
protected

Definition at line 117 of file DescriptorEventReceiver.cpp.

117 {
118 if (enabled) {
119 if (suspended) {
120 suspended = false;
123 } else {
124 LOG(WARNING) << getName() << ": Double resume";
125 }
126 } else {
127 LOG(WARNING) << getName() << ": Resume while not enabled";
128 }
129 }
void resume(DescriptorEventReceiver *descriptorEventReceiver)
static Timeval currentTime()
Definition Timeval.cpp:54

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

96 {
97 unObserved();
98 }

◆ setEnabled()

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

Definition at line 80 of file DescriptorEventReceiver.cpp.

80 {
81 lastTriggered = currentTime;
82
83 observed();
84 }

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

135 {
136 if (timeout == TIMEOUT::DEFAULT) {
138 } else {
139 this->maxInactivity = timeout;
140 }
141
143 }

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

104 {
105 if (enabled) {
106 if (!suspended) {
107 suspended = true;
109 } else {
110 LOG(WARNING) << getName() << ": Double suspend";
111 }
112 } else {
113 LOG(WARNING) << getName() << ": Suspend while not enabled";
114 }
115 }
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 160 of file DescriptorEventReceiver.cpp.

160 {
161 lastTriggered = currentTime;
162 }

Friends And Related Symbol Documentation

◆ DescriptorEventPublisher

friend class DescriptorEventPublisher
friend

Definition at line 114 of file DescriptorEventReceiver.h.

Member Data Documentation

◆ descriptorEventPublisher

DescriptorEventPublisher& core::DescriptorEventReceiver::descriptorEventPublisher
private

Definition at line 101 of file DescriptorEventReceiver.h.

◆ enabled

bool core::DescriptorEventReceiver::enabled = false
private

Definition at line 105 of file DescriptorEventReceiver.h.

◆ eventCounter

int core::DescriptorEventReceiver::eventCounter = 0
private

Definition at line 112 of file DescriptorEventReceiver.h.

◆ initialTimeout

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

Definition at line 110 of file DescriptorEventReceiver.h.

◆ lastTriggered

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

Definition at line 108 of file DescriptorEventReceiver.h.

◆ maxInactivity

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

Definition at line 109 of file DescriptorEventReceiver.h.

◆ observedFd

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

Definition at line 103 of file DescriptorEventReceiver.h.

◆ suspended

bool core::DescriptorEventReceiver::suspended = false
private

Definition at line 106 of file DescriptorEventReceiver.h.


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