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.

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
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: