Example #1
0
 public byte[] HandleQuery(string sourceUserID, int informationType, byte[] info)
 {
     if (informationType == InformationTypes.GetAllFilesInfo)
     {
         FilesInfoContract contract = new FilesInfoContract();
         contract.AllFileInfoList = this.fileConfig.FileList;
         return(CompactPropertySerializer.Default.Serialize <FilesInfoContract>(contract));
     }
     if (informationType == InformationTypes.GetLastUpdateTime)
     {
         LastUpdateTimeContract contract = new LastUpdateTimeContract(this.fileConfig.ClientVersion);
         return(CompactPropertySerializer.Default.Serialize <LastUpdateTimeContract>(contract));
     }
     return(null);
 }
Example #2
0
        /// <summary>
        /// 与服务器的最新版本进行比较,获取要升级的所有文件信息。
        /// </summary>
        private void GetUpdateInfo(out IList <string> downLoadFileNameList, out IList <FileUnit> removeFileNameList)
        {
            byte[] lastUpdateTime = rapidPassiveEngine.CustomizeOutter.Query(InformationTypes.GetLastUpdateTime, null);
            LastUpdateTimeContract lastUpdateTimeContract = CompactPropertySerializer.Default.Deserialize <LastUpdateTimeContract>(lastUpdateTime, 0);

            downLoadFileNameList = new List <string>();
            removeFileNameList   = new List <FileUnit>();
            if (this.updateConfiguration.ClientVersion != lastUpdateTimeContract.ClientVersion)
            {
                //获取服务器文件版本信息列表
                byte[]            fileInfoBytes = rapidPassiveEngine.CustomizeOutter.Query(InformationTypes.GetAllFilesInfo, null);
                FilesInfoContract contract      = CompactPropertySerializer.Default.Deserialize <FilesInfoContract>(fileInfoBytes, 0);

                //更新现有文件
                foreach (FileUnit file in this.updateConfiguration.FileList)
                {
                    FileUnit fileAtServer = ContainsFile(file.FileRelativePath, contract.AllFileInfoList);
                    if (fileAtServer != null)
                    {
                        if (file.Version < fileAtServer.Version)
                        {
                            downLoadFileNameList.Add(file.FileRelativePath);
                        }
                    }
                    else
                    {
                        removeFileNameList.Add(file);
                    }
                }

                //下载新文件
                foreach (FileUnit file in contract.AllFileInfoList)
                {
                    FileUnit fileAtServer = ContainsFile(file.FileRelativePath, this.updateConfiguration.FileList);
                    if (fileAtServer == null)
                    {
                        downLoadFileNameList.Add(file.FileRelativePath);
                    }
                }
                this.updateConfiguration.FileList      = contract.AllFileInfoList;
                this.updateConfiguration.ClientVersion = lastUpdateTimeContract.ClientVersion;
            }
        }