1 use super::define;
2 use super::errors;
3 use crate::messages::define as message_define;
4 use byteorder::BigEndian;
5 use netio::bytes_reader::BytesReader;
6 
7 pub struct EventMessagesReader {
8     pub reader: BytesReader,
9 }
10 
11 impl EventMessagesReader {
12     pub fn new(reader: BytesReader) -> Self {
13         Self { reader: reader }
14     }
15 
16     pub fn parse_event(
17         &mut self,
18     ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError> {
19         let event_type = self.reader.read_u16::<BigEndian>()?;
20         match event_type {
21             define::RTMP_EVENT_SET_BUFFER_LENGTH => {
22                 return self.read_set_buffer_length();
23             }
24 
25             _ => {
26                 return Err(errors::EventMessagesError {
27                     value: errors::EventMessagesErrorValue::UnknowEventMessageType,
28                 })
29             }
30         }
31     }
32     pub fn read_set_buffer_length(
33         &mut self,
34     ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError> {
35         let stream_id = self.reader.read_u32::<BigEndian>()?;
36         let ms = self.reader.read_u32::<BigEndian>()?;
37 
38         return Ok(message_define::RtmpMessageData::SetBufferLength {
39             stream_id: stream_id,
40             buffer_length: ms,
41         });
42     }
43 }
44