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::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
 
- 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 ()
 
void pipe (Sink *sink, const std::function< void(int)> &callback)
 
void pipe (const std::shared_ptr< Sink > &sink, const std::function< void(int)> &callback)
 
- 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)
 
- Static Public Member Functions inherited from core::EventReceiver
static void atNextTick (const std::function< void(void)> &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 Attributes

std::size_t pufferSize = 0
 
bool suspended = false
 

Additional Inherited Members

- Protected Member Functions inherited from core::EventReceiver
virtual ~EventReceiver ()=default
 
- 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 ()
 

Detailed Description

Definition at line 58 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 74 of file FileReader.cpp.

74 {
75 return getFd() >= 0;
76 }
int getFd() const

References core::Descriptor::getFd().

Here is the call graph for this function:

◆ onEvent()

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

Implements core::EventReceiver.

Definition at line 78 of file FileReader.cpp.

78 {
80 if (!suspended) {
81 std::vector<char> puffer(pufferSize);
82
83 const ssize_t ret = core::system::read(getFd(), puffer.data(), puffer.capacity());
84 if (ret > 0) {
85 if (this->send(puffer.data(), static_cast<std::size_t>(ret)) < 0) {
86 running = false;
87
88 this->error(errno);
89 }
90 } else {
91 running = false;
92
93 if (ret == 0) {
94 this->eof();
95 } else {
96 this->error(errno);
97 }
98 }
99
100 span();
101 }
102 } else {
103 delete this;
104 }
105 }
void error(int errnum)
Definition Source.cpp:109
ssize_t send(const char *chunk, std::size_t chunkLen)
Definition Source.cpp:90
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)
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 return new FileReader(fd, "FileReader: " + path, MF_READSIZE, fd < 0 ? errno : 0);
72 }
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::Request::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 120 of file FileReader.cpp.

120 {
121 if (running) {
122 suspended = false;
123 span();
124 }
125 }

References 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 107 of file FileReader.cpp.

107 {
108 if (!running) {
109 running = true;
110 span();
111 }
112 }

References 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 127 of file FileReader.cpp.

127 {
128 if (running) {
129 this->eof();
130
131 running = false;
132 span();
133 }
134 }

References core::pipe::Source::eof(), 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 114 of file FileReader.cpp.

114 {
115 if (running) {
116 suspended = true;
117 }
118 }

References running, and suspended.

Member Data Documentation

◆ openErrno

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

Definition at line 83 of file FileReader.h.

Referenced by FileReader().

◆ pufferSize

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

Definition at line 78 of file FileReader.h.

Referenced by FileReader(), and onEvent().

◆ running

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

Definition at line 84 of file FileReader.h.

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

◆ suspended

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

Definition at line 80 of file FileReader.h.

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


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