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:
parent
eaa222f034
commit
d3bb8b6a86
9 changed files with 73 additions and 33 deletions
|
@ -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;
|
||||||
|
|
|
@ -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()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue