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 }

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 }

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 }

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

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:

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