winlin

refine the protocol io reader writer arch.

@@ -23,6 +23,22 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -23,6 +23,22 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
23 23
24 #include <srs_protocol_io.hpp> 24 #include <srs_protocol_io.hpp>
25 25
  26 +ISrsBufferWriter::ISrsBufferWriter()
  27 +{
  28 +}
  29 +
  30 +ISrsBufferWriter::~ISrsBufferWriter()
  31 +{
  32 +}
  33 +
  34 +ISrsProtocolStatistic::ISrsProtocolStatistic()
  35 +{
  36 +}
  37 +
  38 +ISrsProtocolStatistic::~ISrsProtocolStatistic()
  39 +{
  40 +}
  41 +
26 ISrsProtocolReader::ISrsProtocolReader() 42 ISrsProtocolReader::ISrsProtocolReader()
27 { 43 {
28 } 44 }
@@ -35,9 +35,62 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. @@ -35,9 +35,62 @@ CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35 #include <srs_kernel_buffer.hpp> 35 #include <srs_kernel_buffer.hpp>
36 36
37 /** 37 /**
  38 +* the system io reader/writer architecture:
  39 ++---------------+ +--------------------+ +---------------+
  40 +| IBufferReader | | IStatistic | | IBufferWriter |
  41 ++---------------+ +--------------------+ +---------------+
  42 +| + read() | | + get_recv_bytes() | | + write() |
  43 ++------+--------+ | + get_recv_bytes() | | + writev() |
  44 + / \ +---+--------------+-+ +-------+-------+
  45 + | / \ / \ / \
  46 + | | | |
  47 ++------+------------------+-+ +-----+----------------+--+
  48 +| IProtocolReader | | IProtocolWriter |
  49 ++---------------------------+ +-------------------------+
  50 +| + readfully() | | + set_send_timeout() |
  51 +| + set_recv_timeout() | +-------+-----------------+
  52 ++------------+--------------+ / \
  53 + / \ |
  54 + | |
  55 + +--+-----------------------------+-+
  56 + | IProtocolReaderWriter |
  57 + +----------------------------------+
  58 + | + is_never_timeout() |
  59 + +----------------------------------+
  60 +*/
  61 +
  62 +/**
  63 +* the writer for the buffer to write to whatever channel.
  64 +*/
  65 +class ISrsBufferWriter
  66 +{
  67 +public:
  68 + ISrsBufferWriter();
  69 + virtual ~ISrsBufferWriter();
  70 +// for protocol
  71 +public:
  72 + virtual int write(void* buf, size_t size, ssize_t* nwrite) = 0;
  73 + virtual int writev(const iovec *iov, int iov_size, ssize_t* nwrite) = 0;
  74 +};
  75 +
  76 +/**
  77 +* get the statistic of channel.
  78 +*/
  79 +class ISrsProtocolStatistic
  80 +{
  81 +public:
  82 + ISrsProtocolStatistic();
  83 + virtual ~ISrsProtocolStatistic();
  84 +// for protocol
  85 +public:
  86 + virtual int64_t get_recv_bytes() = 0;
  87 + virtual int64_t get_send_bytes() = 0;
  88 +};
  89 +
  90 +/**
38 * the reader for the protocol to read from whatever channel. 91 * the reader for the protocol to read from whatever channel.
39 */ 92 */
40 -class ISrsProtocolReader : public ISrsBufferReader 93 +class ISrsProtocolReader : public virtual ISrsBufferReader, public virtual ISrsProtocolStatistic
41 { 94 {
42 public: 95 public:
43 ISrsProtocolReader(); 96 ISrsProtocolReader();
@@ -46,13 +99,15 @@ public: @@ -46,13 +99,15 @@ public:
46 public: 99 public:
47 virtual void set_recv_timeout(int64_t timeout_us) = 0; 100 virtual void set_recv_timeout(int64_t timeout_us) = 0;
48 virtual int64_t get_recv_timeout() = 0; 101 virtual int64_t get_recv_timeout() = 0;
49 - virtual int64_t get_recv_bytes() = 0; 102 +// for handshake.
  103 +public:
  104 + virtual int read_fully(void* buf, size_t size, ssize_t* nread) = 0;
50 }; 105 };
51 106
52 /** 107 /**
53 * the writer for the protocol to write to whatever channel. 108 * the writer for the protocol to write to whatever channel.
54 */ 109 */
55 -class ISrsProtocolWriter 110 +class ISrsProtocolWriter : public virtual ISrsBufferWriter, public virtual ISrsProtocolStatistic
56 { 111 {
57 public: 112 public:
58 ISrsProtocolWriter(); 113 ISrsProtocolWriter();
@@ -61,11 +116,12 @@ public: @@ -61,11 +116,12 @@ public:
61 public: 116 public:
62 virtual void set_send_timeout(int64_t timeout_us) = 0; 117 virtual void set_send_timeout(int64_t timeout_us) = 0;
63 virtual int64_t get_send_timeout() = 0; 118 virtual int64_t get_send_timeout() = 0;
64 - virtual int64_t get_send_bytes() = 0;  
65 - virtual int writev(const iovec *iov, int iov_size, ssize_t* nwrite) = 0;  
66 }; 119 };
67 120
68 -class ISrsProtocolReaderWriter : public ISrsProtocolReader, public ISrsProtocolWriter 121 +/**
  122 +* the reader and writer.
  123 +*/
  124 +class ISrsProtocolReaderWriter : public virtual ISrsProtocolReader, public virtual ISrsProtocolWriter
69 { 125 {
70 public: 126 public:
71 ISrsProtocolReaderWriter(); 127 ISrsProtocolReaderWriter();
@@ -76,10 +132,6 @@ public: @@ -76,10 +132,6 @@ public:
76 * whether the specified timeout_us is never timeout. 132 * whether the specified timeout_us is never timeout.
77 */ 133 */
78 virtual bool is_never_timeout(int64_t timeout_us) = 0; 134 virtual bool is_never_timeout(int64_t timeout_us) = 0;
79 -// for handshake.  
80 -public:  
81 - virtual int read_fully(void* buf, size_t size, ssize_t* nread) = 0;  
82 - virtual int write(void* buf, size_t size, ssize_t* nwrite) = 0;  
83 }; 135 };
84 136
85 #endif 137 #endif