예제 #1
0
        public byte Execute()
        {
            var result = 0;


            var checker = _checkerCreator.CreateChecker();

            checker.CheckerLocation = CheckerLocation;

            var errorList = _errorFinderCreator.Create();

            var remover = _errorRemoverCreator.Create();

            var collector = _garbageCollectorCreator.Create();

            #region Обновление софта
            var updateDirector = new UpdateDirector(new UpdateFtpServerBuilder());
            _updateServer = updateDirector.BuildServer();

            var miscFiles = new[]
            {
                $@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\misc\chknewarv.exe",
                $@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\misc\podr.gz"
            };

            _subject.SetUpMessage(@"\yПоиск обновлений на ftp://10.7.97.20/software/registr");

            foreach (var file in miscFiles)
            {
                var checkReslut = _updateServer.CheckFileState(file);
                if (checkReslut <= File.GetLastWriteTime(file))
                {
                    continue;
                }
                _subject.SetUpMessage($@"\yНайдено обновление файла {Path.GetFileName(file)} от {checkReslut}");
                _updateServer.UpdateFile(file);
            }
            #endregion

            //2. Дополнили файл, если есть, чем дополнять
            var appender = _fileAppenderCreator.Create();


            //3. Обрабатываем файлы
            _listReturner = new ListReturner();
            _doIteration  = true;
            while (_doIteration)
            {
                //Получаем список файлов
                var fileList = _listReturner.GetFileList(FilePath, Mask);

                //Для каждого файла из списка запускем чеккер. В результате появятся либо архивы, либо останутся исходные файлы и
                //появятся новые файлы с расширением .txt

                foreach (var file in fileList)
                {
                    var retMessage = appender.AppendFile(file, Additive);
                    var fileName   = Path.GetFileName(file);
                    if (retMessage != null)
                    {
                        _subject.SetUpMessage($@"\bК файлу {fileName} {retMessage}");
                    }
                    _subject.SetUpMessage($@"\bЗапускаю проверку файла {fileName} программой chkNewArv.exe...");
                    checker.StartChecking(file);
                }

                //Получаем список файлов с ошибками и для каждого из файлов в списке производим удаление ошибок
                var errors = errorList.FindErrors(FilePath);
                var err    = errors as string[] ?? errors.ToArray();
                if (err.Length != 0)
                {
                    _subject.SetUpMessage(@"\wОбнаружены следующие отчёты об ошибках:");
                    var i = 0;
                    foreach (var file in err)
                    {
                        _subject.SetUpMessage($@"\w{++i}) {Path.GetFileName(file)}");
                    }
                    remover.RemoveErrors(err, FilePath);
                }
                else
                {
                    _doIteration = false;
                }

                collector.MoveTo = $@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\dispose";
                collector.CleanUp(FilePath, "*.txt");
                collector.CleanUp(FilePath, "*.old");
                collector.MoveTo = $@"{Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)}\err";
                collector.CleanUp(FilePath, "*.err");
            }


            var archList = _archiveFinderCreator.Create();
            var archives = archList.FindArchives(FilePath);
            var arch     = archives as string[] ?? archives.ToArray();
            if (arch.Length != 0)
            {
                _subject.SetUpMessage(@"\mОбнаружены следующие архивы:");
                var i = 0;
                foreach (var file in arch)
                {
                    _subject.SetUpMessage($@"\m{++i}) {Path.GetFileName(file)}");
                }
                _ftpFileDistributor = _ftpFileDistributorCreator.Create();
                var uploadResult = _ftpFileDistributor.DistributeFiles(arch);
                MoveToArchive(arch);
                //todo uploadResult вывести в протокол выполнения и на экран
            }


            return((byte)result);
        }