CSharpRTMP.Core.Protocols.Rtmfp.InboundRTMFPProtocol.SubScribeStream C# (CSharp) Method

SubScribeStream() public method

public SubScribeStream ( Peer peer, uint id, string name, FlowWriter writer, double start, double length ) : OutNetRtmfpStream
peer Peer
id uint
name string
writer FlowWriter
start double
length double
return OutNetRtmfpStream
        public override OutNetRtmfpStream SubScribeStream(Peer peer, uint id, string name, FlowWriter writer, double start, double length)
        {
            var session = writer.Band as Session;
            var outNetRtmfpStream = new OutNetRtmfpStream(session, session.Application.StreamsManager, id, name) { Writer = writer, Unbuffered = start == -3000 };
            outNetRtmfpStream.Init();
            var inBoundStream = session.Application.StreamsManager.FindByTypeByName(StreamTypes.ST_IN_NET, name, true, false).Select(x => x.Value).OfType<IInStream>().FirstOrDefault();
            
            switch ((int)start)
            {
                case -2000:
                    if (inBoundStream != null)
                    {
                        inBoundStream.Link(outNetRtmfpStream);
                    }
                    else
                    {
                        goto default;
                    }
                    break;
                case -1000:
                    if (inBoundStream != null)
                    {
                        inBoundStream.Link(outNetRtmfpStream);
                    }
                    else
                    {
                        goto case -999;
                    }
                    break;
                case -999:
                    if (ClientApplicationManager.ClusterApplication != null)
                    {
                        ClientApplicationManager.ClusterApplication.GetProtocolHandler<BaseClusterAppProtocolHandler>().PlayStream(session.Application.Id, name);
                    }
                    break;
                default:
                    var metadata = session.Application.StreamsManager.GetMetaData(name, true, session.Application.Configuration);
                    var pRtmpInFileStream = InFileRTMPStream.GetInstance(session, session.Application.StreamsManager, metadata);
                        if (pRtmpInFileStream == null)
                        {
                            WARN("Unable to get file stream. Metadata:\n{0}", metadata.ToString());
                            goto case -999;
                        }
                        if (!pRtmpInFileStream.Initialize(metadata[Defines.CONF_APPLICATION_CLIENTSIDEBUFFER]))
                        {
                            WARN("Unable to initialize file inbound stream");
                            pRtmpInFileStream.Dispose();
                            goto case -999;
                        }
                        if (!pRtmpInFileStream.Link(outNetRtmfpStream))
                        {
                            goto case -999;
                        }
                        if (!pRtmpInFileStream.Play(start, length))
                        {
                            FATAL("Unable to start the playback");
                            goto case -999;
                        }
                    break;
            }
            return outNetRtmfpStream;
        }