12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- using LJLib;
- using LJLib.Net.SPI.Com;
- using LJLib.Tools.Encry;
- using LJProxy.LJLib.Net.SPI.Server;
- using LJProxy.Models;
- using Microsoft.AspNetCore.Mvc;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Threading.Tasks;
- namespace LJProxy.Excutor
- {
- public class GetUpdatePkgExcutor : ExcutorBase<GetUpdatePkgRequest>
- {
- private static object _syncRoot = new object();
- protected override IActionResult ExcuteInternal(GetUpdatePkgRequest request, object state)
- {
- GetUpdatePkgResponse rslt = new GetUpdatePkgResponse();
- rslt.ErrCode = "0";
- var apkDirs = @$"{AppDomain.CurrentDomain.BaseDirectory}apk\";
- if (!Directory.Exists(apkDirs))
- {
- rslt.ErrMsg = "apk file folder not exists";
- return new JsonResult(rslt);
- }
- //cache file version
- GetUpdatePkgResponse apkInfo = null;
- string cacheKey = "NewestApkData";
- lock (_syncRoot)
- {
- apkInfo = Cache.DefaultCache.Get(cacheKey) as GetUpdatePkgResponse;
- if (apkInfo == null)
- {
- var dirinfo = new DirectoryInfo(apkDirs);
- var file = dirinfo.GetFiles()
- .Where(x => x.Name.EndsWith(".apk", StringComparison.CurrentCultureIgnoreCase))
- .OrderByDescending(x => x.LastWriteTime).FirstOrDefault();
- if (file == null)
- {
- rslt.ErrMsg = "can not found apk";
- return new JsonResult(rslt);
- }
- byte[] apkData = null;
- using (var fs = file.OpenRead())
- using (var ms = new MemoryStream())
- {
- byte[] buff = new byte[10240];
- int read = 0;
- int total = 0;
- while ((read = fs.Read(buff, 0, buff.Length)) > 0)
- {
- ms.Write(buff, 0, read);
- ms.Flush();
- total += read;
- }
- apkData = ms.ToArray();
- }
- APKHelper apkHelper = new APKHelper();
- var md5Helper = new MD5();
- var clientVer = apkHelper.GetVersionName(apkData);
- apkInfo = new GetUpdatePkgResponse();
- apkInfo.Version = clientVer;
- apkInfo.ApkData = apkData;
- apkInfo.Checksum = md5Helper.GetMD5(apkData);
- //TODO:文件夹缓存依赖不生效,待扩展
- Cache.DefaultCache.Add(cacheKey, apkInfo, Cache.CreateCacheItemPolicy(null, DateTime.Now.AddMinutes(30), new List<string>() { file.FullName }));
- }
- }
- rslt.Version = apkInfo.Version;
- rslt.ApkData = apkInfo.ApkData;
- rslt.Checksum = apkInfo.Checksum;
- return new JsonResult(rslt);
- }
- }
- }
|