CSharpRTMP.Core.Protocols.Rtmfp.Flow.HandlerMessage C# (CSharp) Method

HandlerMessage() private method

private HandlerMessage ( Stream message, bool needDispose = true ) : void
message Stream
needDispose bool
return void
        private void HandlerMessage(Stream message,bool needDispose = true)
        {
            var type = message.ReadByte();
            AMF0Reader amf = new AMF0Reader(message);
            switch (type)
            {
                case Defines.RM_HEADER_MESSAGETYPE_INVOKE:
                case Defines.RM_HEADER_MESSAGETYPE_FLEX:
                case Defines.RM_HEADER_MESSAGETYPE_FLEXSTREAMSEND:
                    amf._ReadUInt32();//skip timestamp
                    goto default;
                case Defines.RM_HEADER_MESSAGETYPE_VIDEODATA:
                    VideoHandler(message);
                    break;
                case Defines.RM_HEADER_MESSAGETYPE_AUDIODATA:
                    AudioHandler(message);
                    break;
                case Defines.RM_HEADER_MESSAGETYPE_CHUNKSIZE:
                    RawHandler(1, message);
                    break;
                case Defines.RM_HEADER_MESSAGETYPE_USRCTRL:
                    amf._ReadUInt32();//skip timestamp
                    var usrCtrlType = amf.ReadUInt16();
                    switch (usrCtrlType)
                    {
                        case 0x29:
                            var keepAliveServer = amf.ReadUInt32();
                            var keepAlivePeer = amf.ReadUInt32();
                            Logger.Debug("keepAliveServer:{0},keepAlivePeer:{1}", keepAliveServer, keepAlivePeer);
                            Band.KeepAliveServer = keepAliveServer;
                            break;
                        case 0x22:
                            var syncID = amf.ReadUInt32();
                            var count = amf.ReadUInt32();
                            if (Band.FlowSynchronization.ContainsKey(syncID))
                            {
                                if (Band.FlowSynchronization[syncID].Count + 1 == count)
                                {
                                    foreach (var flow in Band.FlowSynchronization[syncID])
                                        flow.SyncDone();
                                    Band.FlowSynchronization[syncID].Clear();
                                }
                                else
                                {
                                    Band.FlowSynchronization[syncID].Add(this);
                                    IsWaitingSync = true;
                                }
                            }
                            else
                            {
                                Band.FlowSynchronization[syncID] = new HashSet<Flow> {this};
                                IsWaitingSync = true;
                            }
                            //Logger.Debug("syncID:{0},count:{1}", syncID, count);
                            break;
                    }
                    break;
                default:
                    try
                    {
                        var messageBody = RtmpProtocolSerializer.Deserialize(type, amf);
                        switch (type)
                        {
                            case Defines.RM_HEADER_MESSAGETYPE_INVOKE:
                            case Defines.RM_HEADER_MESSAGETYPE_FLEX:
                                string functionName = messageBody[Defines.RM_INVOKE, Defines.RM_INVOKE_FUNCTION];
                                Writer.CallbackHandle = messageBody[Defines.RM_INVOKE, Defines.RM_INVOKE_ID];
                                MessageHandler(functionName, messageBody[Defines.RM_INVOKE, Defines.RM_INVOKE_PARAMS]);
                                break;
                            case Defines.RM_HEADER_MESSAGETYPE_NOTIFY:
                            case Defines.RM_HEADER_MESSAGETYPE_FLEXSTREAMSEND:
                                break;
                            default:
                                Logger.WARN("type:{0}\r\n{1}", type, messageBody.ToString());
                                break;
                        }
                    }
                    catch (Exception)
                    {
                        //do nothing
                    }
                    break;
            }
            Writer.CallbackHandle = 0;
           if(needDispose) message.Dispose();
        }
        public void SyncDone()