mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
refine the protocol io reader writer arch.
This commit is contained in:
parent
b0e4dc8085
commit
46c1367fe8
2 changed files with 78 additions and 10 deletions
|
@ -23,6 +23,22 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
#include <srs_protocol_io.hpp>
|
#include <srs_protocol_io.hpp>
|
||||||
|
|
||||||
|
ISrsBufferWriter::ISrsBufferWriter()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ISrsBufferWriter::~ISrsBufferWriter()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ISrsProtocolStatistic::ISrsProtocolStatistic()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
ISrsProtocolStatistic::~ISrsProtocolStatistic()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
ISrsProtocolReader::ISrsProtocolReader()
|
ISrsProtocolReader::ISrsProtocolReader()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,10 +34,63 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
|
||||||
#include <srs_kernel_buffer.hpp>
|
#include <srs_kernel_buffer.hpp>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the system io reader/writer architecture:
|
||||||
|
+---------------+ +--------------------+ +---------------+
|
||||||
|
| IBufferReader | | IStatistic | | IBufferWriter |
|
||||||
|
+---------------+ +--------------------+ +---------------+
|
||||||
|
| + read() | | + get_recv_bytes() | | + write() |
|
||||||
|
+------+--------+ | + get_recv_bytes() | | + writev() |
|
||||||
|
/ \ +---+--------------+-+ +-------+-------+
|
||||||
|
| / \ / \ / \
|
||||||
|
| | | |
|
||||||
|
+------+------------------+-+ +-----+----------------+--+
|
||||||
|
| IProtocolReader | | IProtocolWriter |
|
||||||
|
+---------------------------+ +-------------------------+
|
||||||
|
| + readfully() | | + set_send_timeout() |
|
||||||
|
| + set_recv_timeout() | +-------+-----------------+
|
||||||
|
+------------+--------------+ / \
|
||||||
|
/ \ |
|
||||||
|
| |
|
||||||
|
+--+-----------------------------+-+
|
||||||
|
| IProtocolReaderWriter |
|
||||||
|
+----------------------------------+
|
||||||
|
| + is_never_timeout() |
|
||||||
|
+----------------------------------+
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* the writer for the buffer to write to whatever channel.
|
||||||
|
*/
|
||||||
|
class ISrsBufferWriter
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ISrsBufferWriter();
|
||||||
|
virtual ~ISrsBufferWriter();
|
||||||
|
// for protocol
|
||||||
|
public:
|
||||||
|
virtual int write(void* buf, size_t size, ssize_t* nwrite) = 0;
|
||||||
|
virtual int writev(const iovec *iov, int iov_size, ssize_t* nwrite) = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the statistic of channel.
|
||||||
|
*/
|
||||||
|
class ISrsProtocolStatistic
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
ISrsProtocolStatistic();
|
||||||
|
virtual ~ISrsProtocolStatistic();
|
||||||
|
// for protocol
|
||||||
|
public:
|
||||||
|
virtual int64_t get_recv_bytes() = 0;
|
||||||
|
virtual int64_t get_send_bytes() = 0;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the reader for the protocol to read from whatever channel.
|
* the reader for the protocol to read from whatever channel.
|
||||||
*/
|
*/
|
||||||
class ISrsProtocolReader : public ISrsBufferReader
|
class ISrsProtocolReader : public virtual ISrsBufferReader, public virtual ISrsProtocolStatistic
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ISrsProtocolReader();
|
ISrsProtocolReader();
|
||||||
|
@ -46,13 +99,15 @@ public:
|
||||||
public:
|
public:
|
||||||
virtual void set_recv_timeout(int64_t timeout_us) = 0;
|
virtual void set_recv_timeout(int64_t timeout_us) = 0;
|
||||||
virtual int64_t get_recv_timeout() = 0;
|
virtual int64_t get_recv_timeout() = 0;
|
||||||
virtual int64_t get_recv_bytes() = 0;
|
// for handshake.
|
||||||
|
public:
|
||||||
|
virtual int read_fully(void* buf, size_t size, ssize_t* nread) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* the writer for the protocol to write to whatever channel.
|
* the writer for the protocol to write to whatever channel.
|
||||||
*/
|
*/
|
||||||
class ISrsProtocolWriter
|
class ISrsProtocolWriter : public virtual ISrsBufferWriter, public virtual ISrsProtocolStatistic
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ISrsProtocolWriter();
|
ISrsProtocolWriter();
|
||||||
|
@ -61,11 +116,12 @@ public:
|
||||||
public:
|
public:
|
||||||
virtual void set_send_timeout(int64_t timeout_us) = 0;
|
virtual void set_send_timeout(int64_t timeout_us) = 0;
|
||||||
virtual int64_t get_send_timeout() = 0;
|
virtual int64_t get_send_timeout() = 0;
|
||||||
virtual int64_t get_send_bytes() = 0;
|
|
||||||
virtual int writev(const iovec *iov, int iov_size, ssize_t* nwrite) = 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
class ISrsProtocolReaderWriter : public ISrsProtocolReader, public ISrsProtocolWriter
|
/**
|
||||||
|
* the reader and writer.
|
||||||
|
*/
|
||||||
|
class ISrsProtocolReaderWriter : public virtual ISrsProtocolReader, public virtual ISrsProtocolWriter
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ISrsProtocolReaderWriter();
|
ISrsProtocolReaderWriter();
|
||||||
|
@ -76,10 +132,6 @@ public:
|
||||||
* whether the specified timeout_us is never timeout.
|
* whether the specified timeout_us is never timeout.
|
||||||
*/
|
*/
|
||||||
virtual bool is_never_timeout(int64_t timeout_us) = 0;
|
virtual bool is_never_timeout(int64_t timeout_us) = 0;
|
||||||
// for handshake.
|
|
||||||
public:
|
|
||||||
virtual int read_fully(void* buf, size_t size, ssize_t* nread) = 0;
|
|
||||||
virtual int write(void* buf, size_t size, ssize_t* nwrite) = 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue