Esempio n. 1
0
 /// <summary>
 /// 移除模块
 /// </summary>
 /// <param name="module"></param>
 public void RemoveModule(IRtpModuleFactory factory)
 {
     lock (_syncModule)
     {
         if (_moduleFactories.Remove(factory))
         {
             UninstallModule(factory);
         }
     }
 }
Esempio n. 2
0
 /// <summary>
 /// 卸载模块
 /// </summary>
 /// <param name="factory"></param>
 private void UninstallModule(IRtpModuleFactory factory)
 {
     if (_modulesIndex.TryGetValue(factory, out var modules))
     {
         foreach (var module in modules)
         {
             module.Uninstall(this);
         }
         _modulesIndex.Remove(factory);
     }
 }
Esempio n. 3
0
 /// <summary>
 /// 为通讯器添加模块,当通讯器活动时,该模块会被安装
 /// </summary>
 /// <param name="module"></param>
 public void AddModule(IRtpModuleFactory factory)
 {
     lock (_syncModule)
     {
         _moduleFactories.Add(factory);
         if (_context.IsConnected)
         {
             InstallModule(factory);
         }
     }
 }
Esempio n. 4
0
        /// <summary>
        /// 安装模块
        /// </summary>
        /// <param name="factory"></param>
        private void InstallModule(IRtpModuleFactory factory)
        {
            if (_modulesIndex.ContainsKey(factory))
            {
                return;                                     //模块已安装,不重复安装
            }
            var modules = factory.Create();

            if (modules == null)
            {
                return;                  //有可能工厂中的算法得到的是空的模块,这种模块不加载
            }
            foreach (var module in modules)
            {
                _modulesIndex.Add(factory, module);
                module.Install(this);
            }
        }