Exemple #1
0
 private static async Task <string> DownloadBinariesAsync(
     string downloadUrl,
     CancellationToken cancellationToken = default(CancellationToken)
     )
 {
     // FIXME: 표준 출력(stdout)으로 출력하고 있기 때문에, 커맨드라인 인자등을 추가해서 출력을 제어해야합니다.
     using var progress = new DownloadProgress(downloadUrl);
     return(await Downloader.DownloadFileAsync(downloadUrl, progress, cancellationToken));
 }
        /// <summary>Первоначальная проверка наличия необходимости запуска процедуры обновления
        /// с последующим запуском обновления</summary>
        public void StartDownload(ref bool breaked)
        {
            try
            {
                if (FilesForUpdate.Count == 0)
                {
                    if (!IsNeedUpdate())
                    {
                        return;
                    }
                }

                var filesManager         = new FilesManager(_connectionString);
                var clientVersionManager = new ClientVersionManager(_xmlFileName);

                long totalSize = 0;
                FilesForUpdate.ForEach(fileInfo => totalSize += fileInfo.FileSize);

                var progressForm = new frmProgress((int)totalSize);
                progressForm.Show();
                progressForm.BringToFront();

                var downloadProgress = new DownloadProgress(totalSize);

                downloadProgress.ProgressChanged +=
                    (sender, e) => progressForm.Tick(e.ChangeSize, string.Format("{0,3:#.#}/{1,3:#.#} MБ ({2})", (decimal)downloadProgress.DownloadedSize / BytesInMegabyte,
                                                                                 (decimal)downloadProgress.TotalSize / BytesInMegabyte, downloadProgress.CurrentFileName));

                foreach (FileInfo fileInfo in FilesForUpdate)
                {
                    try
                    {
                        downloadProgress.SetCurrentFileName(fileInfo.FileName);
                        filesManager.Download(fileInfo.FileName, downloadProgress);
                        clientVersionManager.SetVersion(fileInfo.FileName, fileInfo.ServerVersion);

                        if (progressForm.FormKeyCode == Keys.Escape)
                        {
                            breaked = true;
                            break;
                        }
                    }
                    catch (Exception)
                    {
                        progressForm.Fail();
                        throw;
                    }
                }

                progressForm.Close();
            }
            catch (Exception exception)
            {
                string _errorMessage = string.Format("Ошибка. {0}{1}{2}", exception.Message, Environment.NewLine, exception.StackTrace);
                MessageBox.Show("Ошибка запуска приложения:\r\n", _errorMessage);
            }
        }
Exemple #3
0
        /// <summary>
        /// Загрузка файла из БД и сохранение под другим именем
        /// </summary>
        /// <param name="fileName">Файл для загрузки из БД</param>
        /// <param name="fullFileName">Полный путь и имя файла для сохранения</param>
        private void Download(String fileName, String fullFileName, DownloadProgress progress)
        {
            SqlConnection connection = MiscFunction.OpenConnection(_connectionString);
            var           strSql     = "SELECT binaryData FROM Srv_ProgramFile WHERE name = '" + MiscFunction.GetFileName(fileName) + "'";
            var           cmd        = new SqlCommand(strSql, connection);
            SqlDataReader reader     = cmd.ExecuteReader(CommandBehavior.SequentialAccess);

            reader.Read();

            var       fs         = new FileStream(fullFileName, FileMode.Create, FileAccess.Write);
            var       writer     = new BinaryWriter(fs);
            int       startIndex = 0;
            const int bufferSize = 1000;
            var       outByte    = new byte[bufferSize];

            long retval = reader.GetBytes(0, startIndex, outByte, 0, bufferSize);

            while (retval == bufferSize)
            {
                writer.Write(outByte);
                writer.Flush();

                startIndex += bufferSize;

                retval = reader.GetBytes(0, startIndex, outByte, 0, bufferSize);

                progress.InicrementDownloadedSize((int)retval);
            }

            writer.Write(outByte, 0, (int)retval);
            writer.Flush();

            writer.Close();
            fs.Close();

            reader.Close();
            connection.Close();
        }
Exemple #4
0
        private void _cmdInLoad_Click(object sender, EventArgs e)
        {
            String connString;

            connString = ConfigurationSettings.AppSettings["ConnectionString"];
            String versionStorageName;

            versionStorageName = ConfigurationSettings.AppSettings["VersionStorage"];

            SqlConnection cnn    = MiscFunction.OpenConnection(connString);
            const string  sqlStr = "SELECT idFile, version, name, DATALENGTH(binaryData) AS fileSize FROM Srv_ProgramFile";
            var           cmd    = new SqlCommand(sqlStr, cnn);
            SqlDataReader sdr    = cmd.ExecuteReader();

            int version  = sdr.GetOrdinal("version");
            int fileName = sdr.GetOrdinal("name");
            int fileSize = sdr.GetOrdinal("fileSize");

            var clientVersionManager = new ClientVersionManager(versionStorageName);

            FilesForLoad.Clear();
            while (sdr.Read())
            {
                var fileInfo = new FileInfo(sdr.GetString(fileName), clientVersionManager.GetVersion(sdr.GetString(fileName)), sdr.GetInt32(version), sdr.GetInt32(fileSize));

                if (fileInfo.NeedUpdate)
                {
                    FilesForLoad.Add(fileInfo);
                }
            }
            sdr.Close();
            cnn.Close();

            //Вывод в таблицу информации при загрузке файлов из БД
            using (SqlDataAdapter a = new SqlDataAdapter("SELECT version, name, Date FROM Srv_ProgramFile", cnn))
            {
                SqlCommandBuilder cb = new SqlCommandBuilder(a);
                DataSet           ds = new DataSet();
                a.Fill(ds, "Srv_ProgramFile");
                dataGridView1.DataSource = ds.Tables[0];
            }

            #region Процесс загрузки
            try
            {
                var filesManager = new FilesManager(connString);
                var CVManager    = new ClientVersionManager(versionStorageName);

                long totalSize = 0;
                FilesForLoad.ForEach(fileInfo => totalSize += fileInfo.FileSize);

                var progressForm = new frmProgress((int)totalSize);
                progressForm.Show();
                progressForm.BringToFront();

                var downloadProgress = new DownloadProgress(totalSize);

                downloadProgress.ProgressChanged +=
                    (senders, ex) => progressForm.Tick(ex.ChangeSize, string.Format("{0,3:#.#}/{1,3:#.#} MБ ({2})", (decimal)downloadProgress.DownloadedSize / BytesInMegabyte,
                                                                                    (decimal)downloadProgress.TotalSize / BytesInMegabyte, downloadProgress.CurrentFileName));

                foreach (FileInfo fileInfo in FilesForLoad)
                {
                    try
                    {
                        downloadProgress.SetCurrentFileName(fileInfo.FileName);
                        filesManager.Download(fileInfo.FileName, downloadProgress);
                        CVManager.SetVersion(fileInfo.FileName, fileInfo.ServerVersion);
                    }
                    catch (Exception)
                    {
                        progressForm.Fail();
                        throw;
                    }
                }

                progressForm.Close();
            }
            catch (Exception exception)
            {
                string _errorMessage = string.Format("Ошибка. {0}{1}{2}", exception.Message, Environment.NewLine, exception.StackTrace);
                MessageBox.Show("Ошибка запуска приложения:\r\n", _errorMessage);
            }
        }
Exemple #5
0
 /// <summary>
 /// Загрузка файла на клиента из БД
 /// </summary>
 /// <param name="fileName">Имя файла для загрузки</param>
 public void Download(String fileName, DownloadProgress progress)
 {
     Download(fileName, AppDomain.CurrentDomain.BaseDirectory + @"/" + fileName, progress);
 }