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

32 {
33 if (sink != nullptr) {
34 sink->disconnect(this);
35 }
36 }
void disconnect(const Source *source)
Definition Sink.cpp:64

Member Function Documentation

◆ disconnect()

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

Definition at line 59 of file Source.cpp.

59 {
60 if (sink == this->sink) {
61 this->sink->disconnect(this);
62 this->sink = nullptr;
63
64 stop();
65 }
66 }
virtual void stop()=0

References stop().

Here is the call graph for this function:

◆ eof()

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

Definition at line 81 of file Source.cpp.

81 {
82 if (sink != nullptr) {
83 sink->streamEof();
84 }
85 }
void streamEof()
Definition Sink.cpp:56

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

Here is the caller graph for this function:

◆ error()

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

Definition at line 87 of file Source.cpp.

87 {
88 if (sink != nullptr) {
89 sink->streamError(errnum);
90 }
91 }
void streamError(int errnum)
Definition Sink.cpp:60

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

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

55 {
56 pipe(sink.get(), callback);
57 }
void pipe(Sink *sink, const std::function< void(int)> &callback)
Definition Source.cpp:38

◆ pipe() [2/2]

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

Definition at line 38 of file Source.cpp.

38 {
39 if (sink != nullptr) {
40 if (isOpen()) {
41 callback(0);
42
43 this->sink = sink;
44 sink->pipe(this);
45 } else {
46 callback(errno);
47 stop();
48 }
49 } else {
50 callback(EINVAL);
51 stop();
52 }
53 }
void pipe(Source *source)
Definition Sink.cpp:36
virtual bool isOpen()=0

References isOpen(), and stop().

Here is the call graph for this function:

◆ resume()

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

Implemented in core::file::FileReader.

◆ send()

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

Definition at line 68 of file Source.cpp.

68 {
69 ssize_t ret = static_cast<ssize_t>(chunkLen);
70
71 if (sink != nullptr) {
72 sink->streamData(chunk, chunkLen);
73 } else {
74 ret = -1;
75 errno = EPIPE;
76 }
77
78 return ret;
79 }
void streamData(const char *chunk, std::size_t chunkLen)
Definition Sink.cpp:52

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

Friends And Related Symbol Documentation

◆ Sink

friend class Sink
friend

Definition at line 70 of file Source.h.

Member Data Documentation

◆ sink

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

Definition at line 68 of file Source.h.


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