Nancy+BUI+SQLite自動更新服務端和客戶端保護更新程序

寫了一個自動更新服務網站和自動更新客戶端。基本功能測試完畢。記錄下git

項目地址:https://github.com/TeemoHQ/AutoUpdategithub

需求

熱替換自我更新,自動集成,回退版本,守護進程,服務端操做,更新維度,腳本控制(bat)多個客戶端。算法

介紹




 

 

AutoUpdateServer採用Nancy WEB框架。數據庫

功能:1.提供上傳文件的接口框架

           2.匹配文件而且創建多個不用客戶端的文件倉庫測試

           3.打包,提供更新包,網站

AutoUpdateClient採用控制檯加密

功能:1.循環請求服務端,檢查當前客戶端是否須要更新3d

           2.檢查客戶端是否空閒code

           3.更新客戶端文件

           4.腳本控制客戶端特殊文件

           5.檢查客戶端進程是否關閉,若是關閉則打開(非更新狀態下)

客戶端

功能:提供當前是否空閒接口


新的知識點梳理

 

1.Nancy.Forms authentication

2.Nancy CSRF防護

3.Nancy 靜態文件的使用

4.7ZIP 壓縮解壓

5.命名管道通信

6.自動更新算法邏輯

其餘:Nancy IIS部署的時候的權限釋放,CRC包的加密,log4net

核心算法

核心的算法都在服務端(大部分時間差很少都花在這裏。改了四五次)

1.匹配文件。生成更新包。一開始是經過文件version屬性,但發現有些文件沒有version屬性,找到更好的方法。下面貼出方法。

 

        private static bool isTheSame(FileInfo f1, FileInfo f2)
        {
            using (var md5 = MD5.Create())
            {
                byte[] hash1, hash2;
                using (var stream = f1.OpenRead())
                    hash1 = md5.ComputeHash(stream);
                using (var stream = f2.OpenRead())
                    hash2 = md5.ComputeHash(stream);
                return hash1.SequenceEqual(hash2);
            }
        }

 


 

2.文件倉庫管理算法(代碼就不貼了。說下邏輯)

//1.第一次上傳的時候或者當前沒有出新文件的時候。和模板文件匹配.

 BaseModel是基文件,由於每一個客戶端其實相似,部分DLL不一樣而已。因此第一次都先匹配這個

//2.第二次開始:

//  A【修改】.上傳文件和本地文件都存在,對比不一樣,則把最新的文件複製到work目錄和倉庫目錄,而且設置上傳文件version爲最新version(存入數據庫時)

//  B【不變】.上傳文件和本地文件都存在,對比相同,不復制文件,設置上傳文件version爲老版本文件的version(存入數據庫時)

//  C【新增】.上傳文件存在,本地文件不存在,則把最新的文件複製到work目錄和倉庫目錄,而且設置上傳文件version爲最新version(存入數據庫時)

//  D【刪除】.上傳文件不存在,本地文件存在。暫時不操做。

3.控制回滾 (代碼不貼)

邏輯:數據庫記錄每次上傳的文件版本信息。回滾時就想減,就拿到新的文件

 


 

效果圖:

 


 

 

相關文章
相關標籤/搜索