CSharpRTMP.Core.Protocols.ProtocolFactoryManager.RegisterProtocolFactory C# (CSharp) Method

RegisterProtocolFactory() public static method

public static RegisterProtocolFactory ( this pFactory ) : bool
pFactory this
return bool
        public static bool RegisterProtocolFactory(this BaseProtocolFactory pFactory)
        {//1. Test to see if this factory is already registered
            if (_factoriesById.ContainsKey(pFactory.Id))
            {
                Logger.FATAL("Factory id {0} already registered", pFactory.Id);
                return false;
            }
            //2. Test to see if the protocol chains exported by this factory are already in use
            if (pFactory.HandledProtocolChains.Any(x => _factoriesByChainName.ContainsKey(x)))
            {
                Logger.FATAL("protocol chain  already handled by factory ");
                return false;
            }
            //3. Test to see if the protocols exported by this factory are already in use
            if (pFactory.HandledProtocols.Any(x => _factoriesByProtocolId.ContainsKey(x)))
            {
                Logger.FATAL("protocol  already handled by factory ");
                return false;
            }
            //4. Register everything
#if PARALLEL
            pFactory.HandledProtocolChains().AsParallel().ForAll(x => _factoriesByChainName[x]=pFactory);
            pFactory.HandledProtocols().AsParallel().ForAll(x => _factoriesByProtocolId[x]=pFactory);
#else
            foreach (var handledProtocolChain in pFactory.HandledProtocolChains)
            {
                _factoriesByChainName[handledProtocolChain] = pFactory;
            }
            foreach (var handledProtocol in pFactory.HandledProtocols)
            {
                _factoriesByProtocolId[handledProtocol] = pFactory;
            }
#endif
            _factoriesById[pFactory.Id] = pFactory;
            return true;
        }