SNode.C
Loading...
Searching...
No Matches
core::socket::stream::SocketReader Class Referenceabstract

#include <SocketReader.h>

Inheritance diagram for core::socket::stream::SocketReader:
Collaboration diagram for core::socket::stream::SocketReader:

Public Member Functions

 SocketReader ()=delete
 
- Public Member Functions inherited from core::DescriptorEventReceiver
 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

 SocketReader (const std::string &instanceName, const std::function< void(int)> &onStatus, const utils::Timeval &timeout, std::size_t blockSize, const utils::Timeval &terminateTimeout)
 
virtual ssize_t read (char *chunk, std::size_t chunkLen)
 
void setBlockSize (std::size_t readBlockSize)
 
std::size_t readFromPeer (char *chunk, std::size_t chunkLen)
 
void shutdownRead ()
 
- Protected Member Functions inherited from core::eventreceiver::ReadEventReceiver
 ReadEventReceiver (const std::string &name, const utils::Timeval &timeout)
 
virtual void readTimeout ()
 
- Protected Member Functions inherited from core::DescriptorEventReceiver
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
 

Protected Attributes

utils::Timeval terminateTimeout
 

Private Member Functions

virtual void onReceivedFromPeer (std::size_t available)=0
 
void readEvent () final
 
std::size_t doRead ()
 
void signalEvent (int sigNum) final
 

Private Attributes

std::function< void(int)> onStatus
 
std::vector< char > readBuffer
 
std::size_t blockSize = 0
 
std::size_t size = 0
 
std::size_t cursor = 0
 
bool shutdownInProgress = false
 

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 39 of file SocketReader.h.

Constructor & Destructor Documentation

◆ SocketReader() [1/2]

core::socket::stream::SocketReader::SocketReader ( )
delete

◆ SocketReader() [2/2]

core::socket::stream::SocketReader::SocketReader ( const std::string & instanceName,
const std::function< void(int)> & onStatus,
const utils::Timeval & timeout,
std::size_t blockSize,
const utils::Timeval & terminateTimeout )
explicitprotected

Definition at line 33 of file SocketReader.cpp.

References core::eventreceiver::ReadEventReceiver::ReadEventReceiver(), setBlockSize(), SocketReader(), terminateTimeout, and utils::Timeval::Timeval().

Referenced by SocketReader().

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

Member Function Documentation

◆ doRead()

std::size_t core::socket::stream::SocketReader::doRead ( )
private

Definition at line 59 of file SocketReader.cpp.

59 {
60 errno = 0;
61
62 if (size == 0) {
63 cursor = 0;
64
65 ssize_t retRead = 0;
66 if (!shutdownInProgress) {
67 const std::size_t readLen = blockSize - size;
68 retRead = read(readBuffer.data() + size, readLen);
69 }
70 if (retRead > 0) {
71 size += static_cast<std::size_t>(retRead);
72
73 if (!isSuspended()) {
74 suspend();
75 }
76 span();
77 } else if (errno == EAGAIN || errno == EWOULDBLOCK || errno == EINTR) {
78 if (isSuspended()) {
79 resume();
80 }
81 } else {
82 onStatus(errno);
83 }
84 } else {
85 span();
86 }
87
88 return size;
89 }
virtual ssize_t read(char *chunk, std::size_t chunkLen)

References blockSize, cursor, core::DescriptorEventReceiver::isSuspended(), core::DescriptorEventReceiver::resume(), shutdownInProgress, size, core::EventReceiver::span(), and core::DescriptorEventReceiver::suspend().

Referenced by readEvent().

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

◆ onReceivedFromPeer()

virtual void core::socket::stream::SocketReader::onReceivedFromPeer ( std::size_t available)
privatepure virtual

Referenced by readEvent().

Here is the caller graph for this function:

◆ read()

ssize_t core::socket::stream::SocketReader::read ( char * chunk,
std::size_t chunkLen )
protectedvirtual

Reimplemented in core::socket::stream::tls::SocketReader.

Definition at line 55 of file SocketReader.cpp.

55 {
56 return core::system::recv(this->getRegisteredFd(), chunk, chunkLen, 0);
57 }
ssize_t recv(int sockfd, void *buf, std::size_t len, int flags)
Definition socket.cpp:69

References core::DescriptorEventReceiver::getRegisteredFd(), and core::system::recv().

Here is the call graph for this function:

◆ readEvent()

void core::socket::stream::SocketReader::readEvent ( )
finalprivatevirtual

Implements core::eventreceiver::ReadEventReceiver.

Definition at line 44 of file SocketReader.cpp.

44 {
45 const std::size_t available = doRead();
46
47 if (available > 0) {
48 onReceivedFromPeer(available);
49 }
50 }
virtual void onReceivedFromPeer(std::size_t available)=0

References doRead(), and onReceivedFromPeer().

Here is the call graph for this function:

◆ readFromPeer()

std::size_t core::socket::stream::SocketReader::readFromPeer ( char * chunk,
std::size_t chunkLen )
protected

Definition at line 96 of file SocketReader.cpp.

96 {
97 const std::size_t maxReturn = std::min(chunkLen, size);
98
99 std::copy(readBuffer.data() + cursor, readBuffer.data() + cursor + maxReturn, chunk);
100
101 cursor += maxReturn;
102 size -= maxReturn;
103
104 return maxReturn;
105 }

References cursor, and size.

◆ setBlockSize()

void core::socket::stream::SocketReader::setBlockSize ( std::size_t readBlockSize)
protected

Definition at line 91 of file SocketReader.cpp.

91 {
92 readBuffer.resize(readBlockSize);
93 blockSize = readBlockSize;
94 }

References blockSize.

Referenced by SocketReader().

Here is the caller graph for this function:

◆ shutdownRead()

void core::socket::stream::SocketReader::shutdownRead ( )
protected

Definition at line 107 of file SocketReader.cpp.

107 {
108 readBuffer.clear();
109
110 size = 0;
111 cursor = 0;
112
113 shutdownInProgress = true;
114
116 }
void setTimeout(const utils::Timeval &timeout)

References cursor, core::DescriptorEventReceiver::setTimeout(), shutdownInProgress, size, and terminateTimeout.

Here is the call graph for this function:

◆ signalEvent()

void core::socket::stream::SocketReader::signalEvent ( int sigNum)
finalprivatevirtual

Reimplemented from core::eventreceiver::ReadEventReceiver.

Definition at line 52 of file SocketReader.cpp.

52 { // Do nothing in case a signal was received
53 }

Member Data Documentation

◆ blockSize

std::size_t core::socket::stream::SocketReader::blockSize = 0
private

Definition at line 71 of file SocketReader.h.

Referenced by doRead(), and setBlockSize().

◆ cursor

std::size_t core::socket::stream::SocketReader::cursor = 0
private

Definition at line 74 of file SocketReader.h.

Referenced by doRead(), readFromPeer(), and shutdownRead().

◆ onStatus

std::function<void(int)> core::socket::stream::SocketReader::onStatus
private

Definition at line 68 of file SocketReader.h.

◆ readBuffer

std::vector<char> core::socket::stream::SocketReader::readBuffer
private

Definition at line 70 of file SocketReader.h.

◆ shutdownInProgress

bool core::socket::stream::SocketReader::shutdownInProgress = false
private

Definition at line 76 of file SocketReader.h.

Referenced by doRead(), and shutdownRead().

◆ size

std::size_t core::socket::stream::SocketReader::size = 0
private

Definition at line 73 of file SocketReader.h.

Referenced by doRead(), readFromPeer(), and shutdownRead().

◆ terminateTimeout

utils::Timeval core::socket::stream::SocketReader::terminateTimeout
protected

Definition at line 79 of file SocketReader.h.

Referenced by shutdownRead(), and SocketReader().


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