1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
use {
    super::{define, errors},
    crate::messages::define as message_define,
    byteorder::BigEndian,
    networkio::bytes_reader::BytesReader,
};

pub struct EventMessagesReader {
    pub reader: BytesReader,
}

impl EventMessagesReader {
    pub fn new(reader: BytesReader) -> Self {
        Self { reader: reader }
    }

    pub fn parse_event(
        &mut self,
    ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError> {
        let event_type = self.reader.read_u16::<BigEndian>()?;
        match event_type {
            define::RTMP_EVENT_SET_BUFFER_LENGTH => {
                return self.read_set_buffer_length();
            }

            _ => {
                return Err(errors::EventMessagesError {
                    value: errors::EventMessagesErrorValue::UnknowEventMessageType,
                })
            }
        }
    }
    pub fn read_set_buffer_length(
        &mut self,
    ) -> Result<message_define::RtmpMessageData, errors::EventMessagesError> {
        let stream_id = self.reader.read_u32::<BigEndian>()?;
        let ms = self.reader.read_u32::<BigEndian>()?;

        return Ok(message_define::RtmpMessageData::SetBufferLength {
            stream_id: stream_id,
            buffer_length: ms,
        });
    }
}