示例#1
0
        public void CheckSites(ISiteDatabaseProvider sites, CancellationToken token)
        {
            List <SiteResponse> responses = new List <SiteResponse>();
            DateTime            currentDateTime;
            DateTime            previousDateTime = DateTime.Now;

            while (!token.IsCancellationRequested)
            {
                currentDateTime = DateTime.Now;
                TimeSpan passedTime         = (currentDateTime - previousDateTime);
                uint     passedMilliseconds = (uint)passedTime.TotalMilliseconds;
                foreach (Site site in sites)
                {
                    if (site.NeedToBeChecked(passedMilliseconds))
                    {
                        SiteResponse siteResponse = new SiteResponse(site);
                        if (responses.IndexOf(siteResponse) > -1)
                        {
                            //т.к. сравнение происходит только по сайту, здесь удаляется прошлый ответ от этого сайта и записывается новый
                            responses.Remove(siteResponse);
                        }
                        responses.Add(siteResponse);
                    }
                }
                _scanResultFileProvider.WriteScanResults(responses);
                Thread.Sleep(500);
            }
        }
示例#2
0
        public int Compare(SiteResponse r1, SiteResponse r2)
        {
            if (r1 == null && r2 == null)
            {
                return(0);
            }
            if (r1 != null && r2 == null)
            {
                return(1);
            }
            if (r1 == null && r2 != null)
            {
                return(-1);
            }
            //на этом этапе оба объекта гарантированно != null
            //сравниваются только опрашиваемые сайты
            Site s1 = r1.GetRespondingSite();
            Site s2 = r2.GetRespondingSite();

            if (s1 == null)
            {
                if (s2 == null)
                {
                    return(0);
                }
                else
                {
                    return(s2.Compare(s1, s2));
                }
            }
            else
            {
                return(s1.Compare(s1, s2));
            }
        }
示例#3
0
 public bool Equals(SiteResponse r)
 {
     if (r == null)
     {
         return(false);
     }
     return(this.GetRespondingSite().Equals(r.GetRespondingSite()));
 }
示例#4
0
 public int CompareTo(SiteResponse r)
 {
     if (r == null)
     {
         return(-1);
     }
     else
     {
         Site s2 = r.GetRespondingSite();
         Site s1 = this.GetRespondingSite();
         return(s1.CompareTo(s2));
     }
 }
示例#5
0
        public override bool Equals(Object obj)
        {
            if (obj == null)
            {
                return(false);
            }
            SiteResponse r = obj as SiteResponse;

            if (r as SiteResponse == null)
            {
                return(false);
            }
            return(this.GetRespondingSite().Equals(r.GetRespondingSite()));
        }
示例#6
0
        public void ReadCommand(ISiteDatabaseProvider sites, CancellationTokenSource cts, ref bool endWork, ref bool asyncCheckRestart)
        {
            Site         site;
            SiteResponse response;
            string       command = ReadLine();

            switch (command.ToLower())
            {
            case "добавить":
                site = GetSiteWithFrequencyFromUser();
                if (site != null)
                {
                    try
                    {
                        sites.AddSite(site);
                    }
                    catch (SiteCheckingFrequencyException e)
                    {
                        PrintString($"Ошибка добавления сайта: {e.Message}", true);
                    }
                    catch (Exception e)
                    {
                        PrintString($"Ошибка добавления сайта: {e.Message}", true);
                    }
                }
                break;

            case "удалить":
                site = GetSiteFromUser();
                sites.RemoveSite(site);
                break;

            case "сохранить":
                try
                {
                    sites.CommitChanges();
                }
                catch (DatabaseFileNotFoundException e)
                {
                    PrintString($"Ошибка сохранения данных: {e.Message}", true);
                }
                catch (DatabaseException e)
                {
                    PrintString($"Ошибка сохранения данных: {e.Message}", true);
                }
                catch (DatabaseNullArgumentException e)
                {
                    PrintString($"Ошибка сохранения данных: {e.Message}", true);
                }
                catch (Exception e)
                {
                    PrintString($"Ошибка сохранения данных: {e.Message}", true);
                }
                finally
                {
                    cts.Cancel();
                }
                break;

            case "сброс":
                try
                {
                    sites.ReloadSites();
                }
                catch (DatabaseFileNotFoundException e)
                {
                    PrintString($"Ошибка загрузки данных: {e.Message}", true);
                }
                catch (DatabaseException e)
                {
                    PrintString($"Ошибка загрузки данных: {e.Message}", true);
                }
                catch (DatabaseNullArgumentException e)
                {
                    PrintString($"Ошибка сохранения данных: {e.Message}", true);
                }
                catch (Exception e)
                {
                    PrintString($"Ошибка загрузки данных: {e.Message}", true);
                }
                break;

            case "печать":
                PrintSites(sites);
                break;

            case "проверка":
                site     = GetSiteFromUser();
                response = new SiteResponse(site);
                PrintString($"{site.Address}: {response.GetStatusCode()} - {response.GetStatusCodeText()}", true);
                break;

            case "выключение":
                cts.Cancel();
                endWork = true;
                break;

            case "справка":
                PrintCommandList();
                break;

            default:
                PrintString("Неизвестная команда. Проверьте правильность ввода или введите \"Справка\" для просмотра списка команд", true);
                break;
            }
        }