Ejemplo n.º 1
0
        private void worker_DoWork(object sender, DoWorkEventArgs e)
        {
            List <string> param       = e.Argument as List <string>;
            MyHttpUtility httpUtility = new MyHttpUtility();
            int           orgId       = 0;

            try
            {
                string result;
                httpUtility.Proxy             = _proxy;
                httpUtility.NetCredential     = _netCredential;
                httpUtility.UserAgent         = _userAgent;
                httpUtility.Accept            = _accept;
                httpUtility.ContentType       = _contentTypeUrlencoded;
                httpUtility.AcceptLanguage    = _acceptLanguage;
                httpUtility.AllowAutoRedirect = false;
                httpUtility.Timeout           = _timeout;
                httpUtility.CachePolicy       = new RequestCachePolicy(RequestCacheLevel.NoCacheNoStore);
                httpUtility.KeepAlive         = true;
                httpUtility.Expect100Continue = false;

                ToLog(">Проверка доступности хостинга. Ожидайте...");
                if (httpUtility.PingHost(_hostAddr, out result))
                {
                    ToLog("Успешно");
                }
                else
                {
                    throw new Exception(
                              "Нет доступа к сети Интернет. Укажите параметры прокси-сервера(если есть). Ошибка: " + result);
                }

                if (_abortSending)
                {
                    throw new Exception(">Отправка данных прервана!");
                }

                //////
                orgId = IsRegisteredOrg(httpUtility, param[0], param[3]);
                if (orgId > 0)
                {
                    ToLog("Успешно");
                }
                else
                {
                    throw new Exception(
                              "Организация не найдена: Вы неверно ввели пароль или Вы не заключали дополнительное соглашение.");
                }

                if (_abortSending)
                {
                    throw new Exception(">Отправка данных прервана!");
                }

                //////
                int mdc = SendMdc(httpUtility, orgId, Int32.Parse(param[1]), Int32.Parse(param[2]));
                if (mdc > 0)
                {
                    ToLog("Успешно");
                }
                else
                {
                    throw new Exception("Произошла ошибка при отправке контрольной суммы!");
                }

                if (_abortSending)
                {
                    throw new Exception(">Отправка данных прервана!");
                }

                //////
                string archivePath = Path.Combine(_directoryPath, _archiveName);
                if (File.Exists(archivePath))
                {
                    File.Delete(archivePath);
                }
                ToLog(">Сжатие контейнера. Ожидайте...");
                using (ZipFile zip = new ZipFile())
                {
                    zip.CompressionLevel = CompressionLevel.BestCompression;
                    zip.AddDirectoryWillTraverseReparsePoints = false;
                    zip.Comment = "Arhiv kontei`nera.";
                    zip.AddFile(Path.Combine(_directoryPath, _containerName), "");
                    zip.Save(archivePath);
                }
                ToLog("Успешно");
                long length = (new FileInfo(archivePath)).Length;
                ToLog("Размер сжатого контейнера: " + length + " байт (" +
                      String.Format("{0:###0.00}", length / 1048576.0) + " Мб)");

                if (_abortSending)
                {
                    throw new Exception(">Отправка данных прервана!");
                }

                int blob = SendBlob(httpUtility, orgId, Int32.Parse(param[1]));
                if (_abortSending)
                {
                    throw new Exception(">Отправка данных прервана!");
                }
                if (blob > 0)
                {
                    ToLog("Успешно");
                }
                else
                {
                    throw new Exception("Произошла ошибка при отправке контейнера!");
                }

                int update = UpdateMDC(httpUtility, orgId, Int32.Parse(param[1]), mdc, 1);
                if (update > 0)
                {
                    ToLog(
                        ">Передача успешно завершена! В течение 30-60 минут Вам на почту прийдет отчет о проверке данных.");
                }
                else
                {
                    throw new Exception("Данные не отправлены из-за ошибки передачи");
                }

                //////
                MainForm.ShowInfoMessage(
                    "Передача успешно завершена! В течение 30-60 минут Вам на почту прийдет отчет о проверке данных.",
                    "Внимание");
            }
            catch (Exception ex)
            {
                ToLog(ex.Message);
                DeleteAll(httpUtility, orgId, Int32.Parse(param[1]));
                MainForm.ShowErrorFlexMessage(ex.Message, "Ошибка отправки данных");
            }
            finally
            {
                _abortSending = false;
            }
        }