コード例 #1
0
 //Добавление в поток уже созданного проекта, isSetup = false - добавление при настройке другого потока
 public void PasteProject(Project project)
 {
     AddEvent("Добавление проекта", "Проект " + project.Code + " из потока " + project.ThreadCalc.Id);
     try
     {
         project.ThreadCalc = this;
         Projects.Add(project.Code, project);
         ProjectsList.Add(project);
         var list = project.Providers.Values.Select(p => p.Copy(this)).ToList();
         project.Providers.Clear();
         foreach (var p in list)
         {
             if (ProvidersDic.ContainsKey(p.Name))
             {
                 project.Providers.Add(p.Name, ProvidersDic[p.Name]);
             }
             else
             {
                 project.Providers.Add(p.Name, p);
                 ProvidersDic.Add(p.Name, p);
             }
             ProvidersDic[p.Name].Projects.Add(project.Code);
         }
     }
     catch (Exception ex)
     {
         AddError("Ошибка при добавлении проекта", ex);
     }
     MakeProviders();
     MakeProjectString();
 }
コード例 #2
0
 //Удаление проекта project из потока, isSetup = false - удаление при настройке другого потока
 public void DeleteProject(Project project)
 {
     AddEvent("Удаление проекта", project.Code);
     try
     {
         foreach (var p in project.Providers.Values)
         {
             p.Projects.Remove(project.Code);
             if (p.Projects.Count == 0)
             {
                 ProvidersDic.Remove(p.Name);
             }
         }
         Projects.Remove(project.Code);
         ProjectsList.Remove(project);
     }
     catch (Exception ex)
     {
         AddError("Ошибка при удалении проекта", ex);
     }
     MakeProviders();
     MakeProjectString();
 }
コード例 #3
0
        //Загружет списки проектов и провайдеров для потока
        public void ReadSetup()
        {
            try
            {
                Projects.Clear();
                ProjectsList.Clear();
                foreach (var provider in ProvidersDic.Values)
                {
                    var pi = provider.ProviderInstance;
                    if (pi != null)
                    {
                        if (ApplicationType == ApplicationType.Controller && General.ProvidersQueues.ContainsKey(pi.Hash))
                        {
                            General.ProvidersQueues.Remove(pi.Hash);
                        }
                        pi.Dispose();
                    }
                }

                ProvidersDic.Clear();
                Sources.Clear();
                Receivers.Clear();
                Imitators.Clear();
                Archive   = null;
                ArchivePr = null;

                using (var rec = new RecDao(General.ControllerFile, "SELECT * FROM Projects WHERE ThreadId =" + Id + " ORDER BY Project"))
                    while (rec.Read())
                    {
                        var proj = new Project(rec, this);
                        if (!Command.IsError && !Projects.ContainsKey(proj.Code))
                        {
                            Projects.Add(proj.Code, proj);
                            ProjectsList.Add(proj);
                            AddEvent("Добавлен проект", proj.Code + ", " + proj.File);
                            proj.ReadProviders();//Чтение списка провайдеров
                        }
                    }
                MakeProviders();
                MakeProjectString();
            }
            catch (Exception ex)
            {
                AddError("Ошибка загрузки списка проектов. Необходимо повторить настройку", ex);
            }
            Procent = 70;

            try //Список провайдеров
            {
                AddEvent("Чтение настроек провайдеров");
                using (var rec = new RecDao(General.ControllerFile, "SELECT * FROM Providers WHERE ThreadId =" + Id))
                    while (rec.Read())
                    {
                        var name = rec.GetString("ProviderName");
                        if (ProvidersDic.ContainsKey(name))
                        {
                            var prov = ProvidersDic[name];
                            prov.Code = rec.GetString("ProviderCode");
                            prov.Inf  = rec.GetString("ProviderInf");
                            prov.Otm  = rec.GetBool("Otm");
                        }
                    }
                foreach (var prov in ProvidersDic.Values)
                {
                    if (prov.Otm)
                    {
                        prov.ProviderInstance = General.RunProvider(prov.Code, prov.Name, prov.Inf, this);
                        if (prov.ProviderInstance != null)
                        {
                            switch (prov.Type.ToProviderType())
                            {
                            case ProviderType.Archive:
                                Archive   = (IArchive)prov.ProviderInstance;
                                ArchivePr = prov;
                                break;

                            case ProviderType.Source:
                                Sources.Add(prov.Name, (ISource)prov.ProviderInstance);
                                break;

                            case ProviderType.Imitator:
                                var ims = (Imitator)prov.ProviderInstance;
                                Imitators.Add(prov.Name, ims);
                                var pname = prov.Name.Substring(0, prov.Name.Length - 4);
                                if (Projects.ContainsKey(pname))
                                {
                                    Projects[pname].Imitator = ims;
                                }
                                else
                                {
                                    AddError("Недопустимое имя провайдера имитатора", null, prov.Name);
                                }
                                break;

                            case ProviderType.Receiver:
                                Receivers.Add(prov.Name, (IReceiver)prov.ProviderInstance);
                                break;
                            }
                            if (ApplicationType == ApplicationType.Controller)
                            {
                                string hash = prov.ProviderInstance.Hash;
                                if (!General.ProvidersQueues.ContainsKey(hash))
                                {
                                    General.ProvidersQueues.Add(hash, new Queue <int>());
                                }
                                prov.ProviderQueue = General.ProvidersQueues[hash];
                            }
                        }
                    }
                }
                MakeProviders();
            }
            catch (Exception ex)
            {
                AddError("Ошибка при чтении настроек провайдеров", ex);
            }
        }