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