Esempio n. 1
0
        /// <summary>
        /// Запускает проверку источника данных в отдельном потоке.
        /// </summary>
        /// <param name="dataSource">Проверяемый источник данных</param>
        public void CheckDataSource(MetaObjectApp.DataSource dataSource)
        {
            //Делаем асинхронный делегат, который запускает проверку источника
            IDatasourceMonitor dsm = monitorList.Find((e) => { return(e.DataSourceName == dataSource.DataSourceName); });

            if (dsm == null)
            {
                return;
            }

            AcyncDelegate d = new AcyncDelegate(() => {
                string newControlSum = dsm.controlSum();
                if (newControlSum != dataSource.ControlSum) //контрольная сумма изменилась
                {
                    //сохраняем новую контрольную сумму
                    dataSource.ControlSum = newControlSum;
                    _repository.Save(dataSource);

                    //создаем новый метаобъект "событие"
                    DataSourceEvent newEvent = (DataSourceEvent)_repository.CreateNewMetaObject(MetaObjectType.DataSourceEvent, "");
                    newEvent.EventType       = "DSchanged";
                    newEvent.SetDataSource(dataSource);
                    _repository.Save(newEvent);

                    //добавляем этот метаобъект в метаобъект "события"
                    DataSourceEvents events = _repository.LoadMetaObject("DataSourceEvents") as DataSourceEvents;
                    events.AddDataSourceEvent(newEvent);
                    _repository.Save(events);

                    Raise_DS_Changed(newEvent);
                }
            });

            d.BeginInvoke(null, null);
        }
Esempio n. 2
0
        /// <summary>
        /// Загружает плагины из папки плагинов.
        /// </summary>
        public void LoadPlugins()
        {
            monitorList.Clear();
            // папка с плагинами
            string folder = System.AppDomain.CurrentDomain.BaseDirectory + PluginsDirPath;

            // dll-файлы в этой папке
            string[] files = Directory.GetFiles(folder, "*.dll");
            foreach (string file in files)
            {
                try
                {
                    Assembly assembly = Assembly.LoadFile(file);
                    foreach (Type type in assembly.GetTypes())
                    {
                        Type iface = type.GetInterface("IDatasourceMonitor");
                        if (iface != null)
                        {
                            IDatasourceMonitor plugin = (IDatasourceMonitor)Activator.CreateInstance(type);
                            monitorList.Add(plugin);
                        }
                    }
                }
                catch (Exception ex)
                {
                    throw new Exception("Ошибка загрузки плагина\n" + ex.Message);
                }
            }
        }