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
 
bool pipe (Sink *sink)
 
bool pipe (const std::shared_ptr< Sink > &sink)
 
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 59 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:87

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 75 of file Source.cpp.

75 {
76 if (sink == this->sink) {
77 this->sink->disconnect(this);
78 this->sink = nullptr;
79
80 stop();
81 }
82 }
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 97 of file Source.cpp.

97 {
98 if (sink != nullptr) {
99 sink->streamEof();
100 }
101 }
void streamEof()
Definition Sink.cpp:79

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 103 of file Source.cpp.

103 {
104 if (sink != nullptr) {
105 sink->streamError(errnum);
106 }
107 }
void streamError(int errnum)
Definition Sink.cpp:83

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(), and core::pipe::Sink::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]

bool core::pipe::Source::pipe ( const std::shared_ptr< Sink > &  sink)

Definition at line 71 of file Source.cpp.

71 {
72 return pipe(sink.get());
73 }
bool pipe(Sink *sink)
Definition Source.cpp:60

References pipe().

Here is the call graph for this function:

◆ pipe() [2/2]

bool core::pipe::Source::pipe ( Sink sink)

Definition at line 60 of file Source.cpp.

60 {
61 const bool success = sink != nullptr && isOpen();
62
63 if (success) {
64 this->sink = sink;
65 sink->pipe(this);
66 }
67
68 return success;
69 }
void pipe(Source *source)
Definition Sink.cpp:58
virtual bool isOpen()=0

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

Referenced by web::http::client::MasterRequest::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 84 of file Source.cpp.

84 {
85 ssize_t ret = static_cast<ssize_t>(chunkLen);
86
87 if (sink != nullptr) {
88 sink->streamData(chunk, chunkLen);
89 } else {
90 ret = -1;
91 errno = EPIPE;
92 }
93
94 return ret;
95 }
void streamData(const char *chunk, std::size_t chunkLen)
Definition Sink.cpp:75

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::MasterRequest::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::MasterRequest::onSourceConnect(), and web::http::server::Response::onSourceConnect().

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 91 of file Source.h.

Member Data Documentation

◆ sink

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

Definition at line 89 of file Source.h.

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


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