1
0
Fork 0
mirror of https://github.com/ossrs/srs.git synced 2025-03-09 15:49:59 +00:00

for #742, refine the io interfaces.

This commit is contained in:
winlin 2017-01-30 19:59:59 +08:00
parent eaa222f034
commit d3bb8b6a86
9 changed files with 73 additions and 33 deletions

View file

@ -41,7 +41,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/** /**
* file writer, to write to file. * file writer, to write to file.
*/ */
class SrsFileWriter : public ISrsBufferWriter class SrsFileWriter : public ISrsWriter
{ {
private: private:
std::string path; std::string path;
@ -85,7 +85,7 @@ public:
/** /**
* file reader, to read from file. * file reader, to read from file.
*/ */
class SrsFileReader : public ISrsBufferReader class SrsFileReader : public ISrsReader
{ {
private: private:
std::string path; std::string path;

View file

@ -23,19 +23,35 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <srs_kernel_io.hpp> #include <srs_kernel_io.hpp>
ISrsBufferReader::ISrsBufferReader() ISrsReader::ISrsReader()
{ {
} }
ISrsBufferReader::~ISrsBufferReader() ISrsReader::~ISrsReader()
{ {
} }
ISrsBufferWriter::ISrsBufferWriter() ISrsStreamWriter::ISrsStreamWriter()
{ {
} }
ISrsBufferWriter::~ISrsBufferWriter() ISrsStreamWriter::~ISrsStreamWriter()
{
}
ISrsVectorWriter::ISrsVectorWriter()
{
}
ISrsVectorWriter::~ISrsVectorWriter()
{
}
ISrsWriter::ISrsWriter()
{
}
ISrsWriter::~ISrsWriter()
{ {
} }

View file

@ -36,33 +36,42 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#endif #endif
/** /**
* the reader for the buffer to read from whatever channel. * The reader to read data from channel.
*/ */
class ISrsBufferReader class ISrsReader
{ {
public: public:
ISrsBufferReader(); ISrsReader();
virtual ~ISrsBufferReader(); virtual ~ISrsReader();
// for protocol/amf0/msg-codec
public: public:
virtual int read(void* buf, size_t size, ssize_t* nread) = 0; virtual int read(void* buf, size_t size, ssize_t* nread) = 0;
}; };
/** /**
* the writer for the buffer to write to whatever channel. * The writer to write stream data to channel.
*/ */
class ISrsBufferWriter class ISrsStreamWriter
{ {
public: public:
ISrsBufferWriter(); ISrsStreamWriter();
virtual ~ISrsBufferWriter(); virtual ~ISrsStreamWriter();
// for protocol
public: public:
/** /**
* write bytes over writer. * write bytes over writer.
* @nwrite the actual written bytes. NULL to ignore. * @nwrite the actual written bytes. NULL to ignore.
*/ */
virtual int write(void* buf, size_t size, ssize_t* nwrite) = 0; virtual int write(void* buf, size_t size, ssize_t* nwrite) = 0;
};
/**
* The vector writer to write vector(iovc) to channel.
*/
class ISrsVectorWriter
{
public:
ISrsVectorWriter();
virtual ~ISrsVectorWriter();
public:
/** /**
* write iov over writer. * write iov over writer.
* @nwrite the actual written bytes. NULL to ignore. * @nwrite the actual written bytes. NULL to ignore.
@ -70,5 +79,15 @@ public:
virtual int writev(const iovec *iov, int iov_size, ssize_t* nwrite) = 0; virtual int writev(const iovec *iov, int iov_size, ssize_t* nwrite) = 0;
}; };
/**
* The generally writer, stream and vector writer.
*/
class ISrsWriter : virtual public ISrsStreamWriter, virtual public ISrsVectorWriter
{
public:
ISrsWriter();
virtual ~ISrsWriter();
};
#endif #endif

View file

@ -341,7 +341,7 @@ int SimpleSocketStream::connect(const char* server_ip, int port)
return srs_hijack_io_connect(io, server_ip, port); return srs_hijack_io_connect(io, server_ip, port);
} }
// ISrsBufferReader // ISrsReader
int SimpleSocketStream::read(void* buf, size_t size, ssize_t* nread) int SimpleSocketStream::read(void* buf, size_t size, ssize_t* nread)
{ {
srs_assert(io); srs_assert(io);

View file

@ -53,7 +53,7 @@ public:
virtual srs_hijack_io_t hijack_io(); virtual srs_hijack_io_t hijack_io();
virtual int create_socket(srs_rtmp_t owner); virtual int create_socket(srs_rtmp_t owner);
virtual int connect(const char* server, int port); virtual int connect(const char* server, int port);
// ISrsBufferReader // ISrsReader
public: public:
virtual int read(void* buf, size_t size, ssize_t* nread); virtual int read(void* buf, size_t size, ssize_t* nread);
// ISrsProtocolReader // ISrsProtocolReader

View file

@ -34,15 +34,20 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
/** /**
* the system io reader/writer architecture: * the system io reader/writer architecture:
+---------------+ +--------------------+ +---------------+ +---------------+ +---------------+
| IBufferReader | | IStatistic | | IBufferWriter | | IStreamWriter | | IVectorWriter |
+---------------+ +--------------------+ +---------------+ +---------------+ +---------------+
| + read() | | + get_recv_bytes() | | + write() | | + write() | | + writev() |
+------+--------+ | + get_send_bytes() | | + writev() | +-------------+-+ ++--------------+
/ \ +---+--------------+-+ +-------+-------+ +----------+ +--------------------+ /\ /\
| / \ / \ / \ | IReader | | IStatistic | \ /
| | | | +----------+ +--------------------+ V
+------+------------------+-+ +-----+----------------+--+ | + read() | | + get_recv_bytes() | +------+----+
+------+---+ | + get_send_bytes() | | IWriter |
/ \ +---+--------------+-+ +-------+---+
| / \ / \ / \
| | | |
+------+-------------+------+ ++---------------------+--+
| IProtocolReader | | IProtocolWriter | | IProtocolReader | | IProtocolWriter |
+---------------------------+ +-------------------------+ +---------------------------+ +-------------------------+
| + readfully() | | + set_send_timeout() | | + readfully() | | + set_send_timeout() |
@ -80,7 +85,7 @@ public:
/** /**
* the reader for the protocol to read from whatever channel. * the reader for the protocol to read from whatever channel.
*/ */
class ISrsProtocolReader : public virtual ISrsBufferReader, public virtual ISrsProtocolStatistic class ISrsProtocolReader : public virtual ISrsReader, public virtual ISrsProtocolStatistic
{ {
public: public:
ISrsProtocolReader(); ISrsProtocolReader();
@ -108,7 +113,7 @@ public:
/** /**
* the writer for the protocol to write to whatever channel. * the writer for the protocol to write to whatever channel.
*/ */
class ISrsProtocolWriter : public virtual ISrsBufferWriter, public virtual ISrsProtocolStatistic class ISrsProtocolWriter : public virtual ISrsWriter, public virtual ISrsProtocolStatistic
{ {
public: public:
ISrsProtocolWriter(); ISrsProtocolWriter();

View file

@ -131,7 +131,7 @@ void SrsFastStream::skip(int size)
p += size; p += size;
} }
int SrsFastStream::grow(ISrsBufferReader* reader, int required_size) int SrsFastStream::grow(ISrsReader* reader, int required_size)
{ {
int ret = ERROR_SUCCESS; int ret = ERROR_SUCCESS;

View file

@ -60,7 +60,7 @@ public:
* the buffer provices bytes cache for protocol. generally, * the buffer provices bytes cache for protocol. generally,
* protocol recv data from socket, put into buffer, decode to RTMP message. * protocol recv data from socket, put into buffer, decode to RTMP message.
* Usage: * Usage:
* ISrsBufferReader* r = ......; * ISrsReader* r = ......;
* SrsFastStream* fb = ......; * SrsFastStream* fb = ......;
* fb->grow(r, 1024); * fb->grow(r, 1024);
* char* header = fb->read_slice(100); * char* header = fb->read_slice(100);
@ -138,7 +138,7 @@ public:
* @return an int error code, error if required_size negative. * @return an int error code, error if required_size negative.
* @remark, we actually maybe read more than required_size, maybe 4k for example. * @remark, we actually maybe read more than required_size, maybe 4k for example.
*/ */
virtual int grow(ISrsBufferReader* reader, int required_size); virtual int grow(ISrsReader* reader, int required_size);
public: public:
#ifdef SRS_PERF_MERGED_READ #ifdef SRS_PERF_MERGED_READ
/** /**

View file

@ -33,7 +33,7 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#include <srs_kernel_file.hpp> #include <srs_kernel_file.hpp>
#include <srs_protocol_stream.hpp> #include <srs_protocol_stream.hpp>
class MockBufferReader: public ISrsBufferReader class MockBufferReader: public ISrsReader
{ {
private: private:
std::string str; std::string str;