WinForm利用WebClient實現自動升級

代碼如下:


using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Windows.Forms;

namespace CYSoft.CommonLib
{
    /// <summary>
    /// 自動升級
    /// </summary>
    public class AutoUpdate
    {

        #region 字段

        public string m_FileIdField = "FileID";//暫時以文件名爲唯一 "FileID";
        public string FileIDField
        {
            set { m_FileIdField = value; }
            get { return m_FileIdField; }
        }

        public string m_FileInfoField = "FileInfo";
        public string FileInfoField
        {
            set { m_FileInfoField = value; }
            get { return m_FileInfoField; }
        }

        public string m_FileNameField = "FileName";
        public string FileNameField
        {
            set { m_FileNameField = value; }
            get { return m_FileNameField; }
        }
        public string m_FileUrlField = "Url";
        public string FileUrlField
        {
            set { m_FileUrlField = value; }
            get { return m_FileUrlField; }
        }
        public string m_FileSavePathField = "SavePath";
        public string FileSavePathField
        {
            set { m_FileSavePathField = value; }
            get { return m_FileSavePathField; }
        }

        public string m_FileVersionField = "Version";
        public string FileVersionField
        {
            set { m_FileVersionField = value; }
            get { return m_FileVersionField; }
        }

        public string m_FileSizeField = "Size";
        public string FileSizeField
        {
            set { m_FileSizeField = value; }
            get { return m_FileSizeField; }
        }

        public string m_FilePercentageField = "Percentage";
        public string FilePercentageField
        {
            set { m_FilePercentageField = value; }
            get { return m_FilePercentageField; }
        }

        #endregion

        #region 委託 事件

        /// <summary>
        /// 下載過程進度事件
        /// </summary>
        /// <param name="e"></param>
        public delegate void ProgressChangedEventHandler(string fileId, int percentage);
        public event ProgressChangedEventHandler ProgressChangedEvent;

        /// <summary>
        /// 下載完成
        /// </summary>
        /// <param name="fileInfo"></param>
        /// <param name="e"></param>
        public delegate void DownloadFileCompletedEventHandler();
        public event DownloadFileCompletedEventHandler DownloadFileCompletedEvent;

        /// <summary>
        /// 一個文件下載完成
        /// </summary>
        /// <param name="fileInfo"></param>
        /// <param name="e"></param>
        public delegate void DownloadOneFileCompletedEventHandler(string fileId);
        public event DownloadOneFileCompletedEventHandler DownloadOneFileCompletedEvent;

        #endregion

        #region 變量 屬性

        /// <summary>
        /// 本地已經升級文件數據集
        /// </summary>
        private DataSet m_LocalConfigDs = null;

        /// <summary>
        /// 服務器升級文件數據集
        /// </summary>
        private DataSet m_UpdateDs = null;

        WebDownloadFile m_WebDownloadFile = null;

        /// <summary>
        /// 是否需要升級
        /// </summary>
        public bool NeedUpdate
        {
            get
            {
                return m_UpdateDs.Tables[0].Rows.Count > 0 ? true : false;
            }
        }

        #endregion

        #region 構造函數

        public AutoUpdate(DataSet updateDs, DataSet localConfigDs)
        {
            m_UpdateDs = updateDs;

            m_LocalConfigDs = localConfigDs;

            //LoadLocalConfigData(localConfigFile);

            InitDownloadData();
        }

        #endregion

        #region 函數方法

        public void CheckUpdateData()
        {
            DataTable dt = m_UpdateDs.Tables[0].Copy();
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                DataRow dr = dt.Rows[i];

                string sql = m_FileIdField + "='" + dr[m_FileIdField].ToString() + "'";

                DataRow[] drs = m_LocalConfigDs.Tables[0].Select(sql);

                if (drs.Length > 0)
                {
                    if (drs[0][m_FileVersionField].ToString() == dr[m_FileVersionField].ToString())
                    {
                        sql = m_FileIdField + "='" + dr[m_FileIdField].ToString() + "'";
                        DataRow[] tmpdrs = m_UpdateDs.Tables[0].Select(sql);
                        if (tmpdrs.Length > 0)
                            tmpdrs[0].Delete();
                    }
                }
            }

            m_UpdateDs.AcceptChanges();
        }

        /// <summary>
        /// 初始化下載文件數據 (如果使用此方法xml格式必須符合webService方法裏的xml格式)
        /// </summary>
        /// <param name="xml"></param>
        private void InitDownloadData()
        {
            try
            {
                m_WebDownloadFile = new WebDownloadFile();
                m_WebDownloadFile.DownLoadFiles = new List<WebDownloadFile.DownLoadFileInfo>();
                m_WebDownloadFile.ProgressChangedEvent += new WebDownloadFile.ProgressChangedEventHandler(m_WebDownloadFile_ProgressChangedEvent);
                m_WebDownloadFile.DownloadFileCompletedEvent += new WebDownloadFile.DownloadFileCompletedEventHandler(m_WebDownloadFile_DownloadFileCompletedEvent);
                m_WebDownloadFile.DownloadOneFileCompletedEvent += new WebDownloadFile.DownloadOneFileCompletedEventHandler(m_WebDownloadFile_DownloadOneFileCompletedEvent);

                CheckUpdateData();

                foreach (DataRow dr in m_UpdateDs.Tables[0].Rows)
                {
                    WebDownloadFile.DownLoadFileInfo info = new WebDownloadFile.DownLoadFileInfo();
                    info.fileID = dr[m_FileIdField].ToString();
                    info.fileName = dr[m_FileNameField].ToString();
                    info.fileWebUrl = dr[m_FileUrlField].ToString();
                    info.fileSavePath = dr[m_FileSavePathField].ToString();
                    m_WebDownloadFile.DownLoadFiles.Add(info);
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        #endregion

        #region 事件

        void m_WebDownloadFile_DownloadOneFileCompletedEvent(WebDownloadFile.DownLoadFileInfo fileInfo)
        {
            if (DownloadOneFileCompletedEvent != null)
                DownloadOneFileCompletedEvent(fileInfo.fileID);
        }

        public void StartUpdate()
        {
            m_WebDownloadFile.StartDownload();
        }


        void m_WebDownloadFile_ProgressChangedEvent(WebDownloadFile.DownLoadFileInfo fileInfo, int percentage)
        {
            if (ProgressChangedEvent != null)
                ProgressChangedEvent(fileInfo.fileID, percentage);
        }

        void m_WebDownloadFile_DownloadFileCompletedEvent()
        {
            if (DownloadFileCompletedEvent != null)
                DownloadFileCompletedEvent();
        }

        #endregion

    }
}

 

注:WebDownloadFile  相關內容可以在我BLOG裏找

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章