SNode.C
Loading...
Searching...
No Matches
core::pipe::Source Class Referenceabstract

#include <Source.h>

Inheritance diagram for core::pipe::Source:
Collaboration diagram for core::pipe::Source:

Public Member Functions

 Source ()=default
 
 Source (Source &)=delete
 
 Source (Source &&) noexcept=default
 
Sourceoperator= (Source &)=delete
 
Sourceoperator= (Source &&) noexcept=default
 
virtual ~Source ()
 
virtual bool isOpen ()=0
 
void pipe (Sink *sink, const std::function< void(int)> &callback)
 
void pipe (const std::shared_ptr< Sink > &sink, const std::function< void(int)> &callback)
 
virtual void start ()=0
 
virtual void suspend ()=0
 
virtual void resume ()=0
 
virtual void stop ()=0
 

Protected Member Functions

ssize_t send (const char *chunk, std::size_t chunkLen)
 
void eof ()
 
void error (int errnum)
 

Private Member Functions

void disconnect (const Sink *sink)
 

Private Attributes

Sinksink = nullptr
 

Friends

class Sink
 

Detailed Description

Definition at line 60 of file Source.h.

Constructor & Destructor Documentation

◆ Source() [1/3]

core::pipe::Source::Source ( )
default

◆ Source() [2/3]

core::pipe::Source::Source ( Source )
delete

◆ Source() [3/3]

core::pipe::Source::Source ( Source &&  )
defaultnoexcept

◆ ~Source()

core::pipe::Source::~Source ( )
virtual

Definition at line 54 of file Source.cpp.

54 {
55 if (sink != nullptr) {
56 sink->disconnect(this);
57 }
58 }
void disconnect(const Source *source)
Definition Sink.cpp:86

References core::pipe::Sink::disconnect(), and sink.

Here is the call graph for this function:

Member Function Documentation

◆ disconnect()

void core::pipe::Source::disconnect ( const Sink sink)
private

Definition at line 81 of file Source.cpp.

81 {
82 if (sink == this->sink) {
83 this->sink->disconnect(this);
84 this->sink = nullptr;
85
86 stop();
87 }
88 }
virtual void stop()=0

References core::pipe::Sink::disconnect(), sink, and stop().

Referenced by core::pipe::Sink::stop(), and core::pipe::Sink::~Sink().

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

◆ eof()

void core::pipe::Source::eof ( )
protected

Definition at line 103 of file Source.cpp.

103 {
104 if (sink != nullptr) {
105 sink->streamEof();
106 }
107 }
void streamEof()
Definition Sink.cpp:78

References sink, and core::pipe::Sink::streamEof().

Referenced by core::file::FileReader::onEvent(), and core::file::FileReader::stop().

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

◆ error()

void core::pipe::Source::error ( int  errnum)
protected

Definition at line 109 of file Source.cpp.

109 {
110 if (sink != nullptr) {
111 sink->streamError(errnum);
112 }
113 }
void streamError(int errnum)
Definition Sink.cpp:82

References sink, and core::pipe::Sink::streamError().

Referenced by core::file::FileReader::onEvent().

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

◆ isOpen()

virtual bool core::pipe::Source::isOpen ( )
pure virtual

Implemented in core::file::FileReader.

Referenced by pipe().

Here is the caller graph for this function:

◆ operator=() [1/2]

Source & core::pipe::Source::operator= ( Source &&  )
defaultnoexcept

◆ operator=() [2/2]

Source & core::pipe::Source::operator= ( Source )
delete

◆ pipe() [1/2]

void core::pipe::Source::pipe ( const std::shared_ptr< Sink > &  sink,
const std::function< void(int)> &  callback 
)

Definition at line 77 of file Source.cpp.

77 {
78 pipe(sink.get(), callback);
79 }
void pipe(Sink *sink, const std::function< void(int)> &callback)
Definition Source.cpp:60

References pipe().

Here is the call graph for this function:

◆ pipe() [2/2]

void core::pipe::Source::pipe ( Sink sink,
const std::function< void(int)> &  callback 
)

Definition at line 60 of file Source.cpp.

60 {
61 if (sink != nullptr) {
62 if (isOpen()) {
63 callback(0);
64
65 this->sink = sink;
66 sink->pipe(this);
67 } else {
68 callback(errno);
69 stop();
70 }
71 } else {
72 callback(EINVAL);
73 stop();
74 }
75 }
void pipe(Source *source)
Definition Sink.cpp:58
virtual bool isOpen()=0

References isOpen(), core::pipe::Sink::pipe(), sink, and stop().

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

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

◆ resume()

virtual void core::pipe::Source::resume ( )
pure virtual

Implemented in core::file::FileReader.

Referenced by core::socket::stream::SocketWriter::doWrite().

Here is the caller graph for this function:

◆ send()

ssize_t core::pipe::Source::send ( const char *  chunk,
std::size_t  chunkLen 
)
protected

Definition at line 90 of file Source.cpp.

90 {
91 ssize_t ret = static_cast<ssize_t>(chunkLen);
92
93 if (sink != nullptr) {
94 sink->streamData(chunk, chunkLen);
95 } else {
96 ret = -1;
97 errno = EPIPE;
98 }
99
100 return ret;
101 }
void streamData(const char *chunk, std::size_t chunkLen)
Definition Sink.cpp:74

References sink, and core::pipe::Sink::streamData().

Referenced by core::file::FileReader::onEvent().

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

◆ start()

virtual void core::pipe::Source::start ( )
pure virtual

Implemented in core::file::FileReader.

Referenced by web::http::client::Request::onSourceConnect(), and web::http::server::Response::onSourceConnect().

Here is the caller graph for this function:

◆ stop()

virtual void core::pipe::Source::stop ( )
pure virtual

Implemented in core::file::FileReader.

Referenced by disconnect(), web::http::client::Request::onSourceConnect(), web::http::server::Response::onSourceConnect(), and pipe().

Here is the caller graph for this function:

◆ suspend()

virtual void core::pipe::Source::suspend ( )
pure virtual

Implemented in core::file::FileReader.

Referenced by core::socket::stream::SocketWriter::sendToPeer().

Here is the caller graph for this function:

Friends And Related Symbol Documentation

◆ Sink

friend class Sink
friend

Definition at line 92 of file Source.h.

Member Data Documentation

◆ sink

Sink* core::pipe::Source::sink = nullptr
private

Definition at line 90 of file Source.h.

Referenced by disconnect(), eof(), error(), pipe(), send(), and ~Source().


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