1 use { 2 super::{define, errors}, 3 crate::messages::define as message_define, 4 byteorder::BigEndian, 5 bytesio::bytes_reader::BytesReader, 6 }; 7 8 pub struct EventMessagesReader { 9 pub reader: BytesReader, 10 } 11 12 impl EventMessagesReader { new(reader: BytesReader) -> Self13 pub fn new(reader: BytesReader) -> Self { 14 Self { reader } 15 } 16 parse_event( &mut self, ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError>17 pub fn parse_event( 18 &mut self, 19 ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError> { 20 let event_type = self.reader.read_u16::<BigEndian>()?; 21 match event_type { 22 define::RTMP_EVENT_SET_BUFFER_LENGTH => { 23 self.read_set_buffer_length() 24 } 25 26 define::RTMP_EVENT_STREAM_BEGIN => { 27 self.read_stream_begin() 28 } 29 30 define::RTMP_EVENT_STREAM_IS_RECORDED => { 31 self.read_stream_is_recorded() 32 } 33 34 _ => { 35 Err(errors::EventMessagesError { 36 value: errors::EventMessagesErrorValue::UnknowEventMessageType, 37 }) 38 } 39 } 40 } read_set_buffer_length( &mut self, ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError>41 pub fn read_set_buffer_length( 42 &mut self, 43 ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError> { 44 let stream_id = self.reader.read_u32::<BigEndian>()?; 45 let ms = self.reader.read_u32::<BigEndian>()?; 46 47 Ok(message_define::RtmpMessageData::SetBufferLength { 48 stream_id, 49 buffer_length: ms, 50 }) 51 } 52 read_stream_begin( &mut self, ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError>53 pub fn read_stream_begin( 54 &mut self, 55 ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError> { 56 let stream_id = self.reader.read_u32::<BigEndian>()?; 57 58 Ok(message_define::RtmpMessageData::StreamBegin { 59 stream_id, 60 }) 61 } 62 read_stream_is_recorded( &mut self, ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError>63 pub fn read_stream_is_recorded( 64 &mut self, 65 ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError> { 66 let stream_id = self.reader.read_u32::<BigEndian>()?; 67 68 Ok(message_define::RtmpMessageData::StreamIsRecorded { 69 stream_id, 70 }) 71 } 72 } 73