CSharpRTMP.Core.Protocols.Cluster.InboundClusterProtocol.OnReceive C# (CSharp) Метод

OnReceive() защищенный Метод

protected OnReceive ( ClusterMessageType type ) : void
type ClusterMessageType
Результат void
        protected override void OnReceive(ClusterMessageType type)
        {
            string streamName;
            uint appId;
            StreamsManager streamManager;
            switch (type)
            {
                case ClusterMessageType.GetAppId:
                    var appName = InputBuffer.Reader.ReadString();
                    ClientApplicationManager.GetOrCreateRoom(appName);//创建房间自动广播appId
                    break;
                case ClusterMessageType.Publish:
                   
                    appId = InputBuffer.Reader.Read7BitValue();
                    streamName = InputBuffer.Reader.ReadString();
                    var streamType = InputBuffer.Reader.ReadUInt64();
                    var streamId = InputBuffer.Reader.Read7BitValue();
                    var chunkSize = InputBuffer.Reader.Read7BitValue();
                    var publishType = InputBuffer.Reader.ReadString();
                    
                    streamManager = GetRoom(appId).StreamsManager;
                    var getWaitings = streamManager.GetWaitingSubscribers(streamName, streamType);
                    var inStream = new InClusterStream(appId, this, streamName, streamType, chunkSize);
                    InStreams[streamId] = inStream;
                    foreach (var pBaseOutStream in getWaitings)
                    {
                        pBaseOutStream.Link(inStream);
                    }
                    if (publishType == "append" || publishType == "record")
                    {
                        streamManager.CreateOutFileStream(this, inStream, publishType == "append");
                    }
                    Application.GetProtocolHandler<BaseClusterAppProtocolHandler>().PublishStream(appId, inStream, publishType);
                    break;
                case ClusterMessageType.NoSubscriber:
                    appId = InputBuffer.Reader.Read7BitValue();
                    streamName = InputBuffer.Reader.ReadString();
                    streamManager = GetRoom(appId).StreamsManager;
                    foreach (var streams in streamManager.FindByTypeByName(StreamTypes.ST_OUT_NET_CLUSTER, streamName, false, false).Values)
                    {
                        streams.Dispose();
                    }
                    break;
                case ClusterMessageType.Play:
                    appId = InputBuffer.Reader.Read7BitValue();
                    streamName = InputBuffer.Reader.ReadString();
                    streamManager = GetRoom(appId).StreamsManager;
                    Logger.INFO(appId+":Play:"+streamName);
                    foreach (var streams in streamManager.FindByTypeByName(StreamTypes.ST_IN, streamName, true, false).Values)
                    {
                        PublishStream(appId, streams as IInStream);
                    }
                    break;
                default:
                    base.OnReceive(type);
                    break;
            }
        }
    }
InboundClusterProtocol