SNode.C
Loading...
Searching...
No Matches
core::file::FileReader Class Reference

#include <FileReader.h>

Inheritance diagram for core::file::FileReader:
Collaboration diagram for core::file::FileReader:

Public Member Functions

bool isOpen () override
void start () final
void suspend () final
void resume () final
void stop () final
Public Member Functions inherited from core::pipe::Source
 Source ()=default
 Source (Source &)=delete
 Source (Source &&) noexcept=default
Sourceoperator= (Source &)=delete
Sourceoperator= (Source &&) noexcept=default
virtual ~Source ()
bool pipe (Sink *sink)
bool pipe (const std::shared_ptr< Sink > &sink)
Public Member Functions inherited from core::file::File
 File ()
 ~File () override
Public Member Functions inherited from core::Descriptor
 Descriptor ()=delete
 Descriptor (const Descriptor &d)=delete
Descriptoroperator= (int fd)
Descriptoroperator= (const Descriptor &descriptor)=delete
Descriptoroperator= (Descriptor &&descriptor) noexcept
int getFd () const

Static Public Member Functions

static FileReaderopen (const std::string &path, const std::function< void(int)> &callback)

Protected Attributes

int openErrno = 0
bool running = false

Private Member Functions

 FileReader (int fd, const std::string &name, std::size_t pufferSize, int openErrno)
void onEvent (const utils::Timeval &currentTime) override
Private 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
virtual ~EventReceiver ()=default

Private Attributes

std::size_t pufferSize = 0
bool suspended = false

Additional Inherited Members

Protected Member Functions inherited from core::pipe::Source
ssize_t send (const char *chunk, std::size_t chunkLen)
void eof ()
void error (int errnum)
Protected Member Functions inherited from core::Descriptor
 Descriptor (int fd)
 Descriptor (Descriptor &&descriptor) noexcept
virtual ~Descriptor ()
Static Private Member Functions inherited from core::EventReceiver
static void atNextTick (const std::function< void(void)> &callBack)

Detailed Description

Definition at line 59 of file FileReader.h.

Constructor & Destructor Documentation

◆ FileReader()

core::file::FileReader::FileReader ( int fd,
const std::string & name,
std::size_t pufferSize,
int openErrno )
private

Definition at line 59 of file FileReader.cpp.

60 : core::Descriptor(fd)
61 , EventReceiver(name)
64 }
EventReceiver(const std::string &name)
std::size_t pufferSize
Definition FileReader.h:79

References core::Descriptor::Descriptor(), core::EventReceiver::EventReceiver(), openErrno, and pufferSize.

Referenced by open().

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

Member Function Documentation

◆ isOpen()

bool core::file::FileReader::isOpen ( )
overridevirtual

Implements core::pipe::Source.

Definition at line 76 of file FileReader.cpp.

76 {
77 return getFd() >= 0;
78 }
int getFd() const

References core::Descriptor::getFd().

Referenced by resume(), start(), stop(), and suspend().

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

◆ onEvent()

void core::file::FileReader::onEvent ( const utils::Timeval & currentTime)
overrideprivatevirtual

Implements core::EventReceiver.

Definition at line 80 of file FileReader.cpp.

80 {
82 if (!suspended) {
83 std::vector<char> puffer(pufferSize);
84
85 const ssize_t ret = core::system::read(getFd(), puffer.data(), puffer.capacity());
86 if (ret > 0) {
87 if (this->send(puffer.data(), static_cast<std::size_t>(ret)) < 0) {
88 running = false;
89
90 this->error(errno);
91 }
92 } else {
93 running = false;
94
95 if (ret == 0) {
96 this->eof();
97 } else {
98 this->error(errno);
99 }
100 }
101
102 span();
103 }
104 } else {
105 delete this;
106 }
107 }
void error(int errnum)
Definition Source.cpp:103
ssize_t send(const char *chunk, std::size_t chunkLen)
Definition Source.cpp:84
ssize_t read(int fd, void *buf, std::size_t count)
Definition unistd.cpp:57
@ STOPPING
Definition State.h:51
State eventLoopState()
Definition State.cpp:52

References core::pipe::Source::eof(), core::pipe::Source::error(), core::eventLoopState(), core::Descriptor::getFd(), pufferSize, core::system::read(), running, core::pipe::Source::send(), core::EventReceiver::span(), core::STOPPING, and suspended.

Here is the call graph for this function:

◆ open()

FileReader * core::file::FileReader::open ( const std::string & path,
const std::function< void(int)> & callback )
static

Definition at line 66 of file FileReader.cpp.

66 {
67 errno = 0;
68
69 const int fd = core::system::open(path.c_str(), O_RDONLY);
70
71 callback(fd);
72
73 return new FileReader(fd, "FileReader: " + path, MF_READSIZE, fd < 0 ? errno : 0);
74 }
constexpr int MF_READSIZE
FileReader(int fd, const std::string &name, std::size_t pufferSize, int openErrno)
int open(const char *pathname, int flags)
Definition unistd.cpp:52

References FileReader(), MF_READSIZE, and core::system::open().

Referenced by web::http::client::MasterRequest::executeSendFile(), and web::http::server::Response::sendFile().

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

◆ resume()

void core::file::FileReader::resume ( )
finalvirtual

Implements core::pipe::Source.

Definition at line 122 of file FileReader.cpp.

122 {
123 if (running && isOpen()) {
124 suspended = false;
125 span();
126 }
127 }
bool isOpen() override

References isOpen(), running, core::EventReceiver::span(), and suspended.

Here is the call graph for this function:

◆ start()

void core::file::FileReader::start ( )
finalvirtual

Implements core::pipe::Source.

Definition at line 109 of file FileReader.cpp.

109 {
110 if (!running && isOpen()) {
111 running = true;
112 span();
113 }
114 }

References isOpen(), running, and core::EventReceiver::span().

Here is the call graph for this function:

◆ stop()

void core::file::FileReader::stop ( )
finalvirtual

Implements core::pipe::Source.

Definition at line 129 of file FileReader.cpp.

129 {
130 if (running && isOpen()) {
131 this->eof();
132
133 running = false;
134 span();
135 }
136 }

References core::pipe::Source::eof(), isOpen(), running, and core::EventReceiver::span().

Here is the call graph for this function:

◆ suspend()

void core::file::FileReader::suspend ( )
finalvirtual

Implements core::pipe::Source.

Definition at line 116 of file FileReader.cpp.

116 {
117 if (running && isOpen()) {
118 suspended = true;
119 }
120 }

References isOpen(), running, and suspended.

Here is the call graph for this function:

Member Data Documentation

◆ openErrno

int core::file::FileReader::openErrno = 0
protected

Definition at line 84 of file FileReader.h.

Referenced by FileReader().

◆ pufferSize

std::size_t core::file::FileReader::pufferSize = 0
private

Definition at line 79 of file FileReader.h.

Referenced by FileReader(), and onEvent().

◆ running

bool core::file::FileReader::running = false
protected

Definition at line 85 of file FileReader.h.

Referenced by onEvent(), resume(), start(), stop(), and suspend().

◆ suspended

bool core::file::FileReader::suspended = false
private

Definition at line 81 of file FileReader.h.

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


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