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); }
/// <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; } }