CheckUpdateExcutor.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. using LJProxy.LJLib.Net.SPI.Server;
  2. using LJProxy.Models;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.IO;
  7. using LJLib;
  8. using Microsoft.AspNetCore.Mvc;
  9. namespace LJProxy.Excutor
  10. {
  11. public class CheckUpdateExcutor : ExcutorBase<CheckUpdateRequest>
  12. {
  13. private static object _syncRoot = new object();
  14. protected override IActionResult ExcuteInternal(CheckUpdateRequest request, object state)
  15. {
  16. CheckUpdateResponse rslt = new CheckUpdateResponse();
  17. rslt.ErrCode = "0";
  18. if (string.IsNullOrEmpty(request.CurrentVersion))
  19. {
  20. rslt.ErrMsg = "CurrentVersion can not be empty";
  21. return new JsonResult(rslt);
  22. }
  23. var apkDirs =@$"{AppDomain.CurrentDomain.BaseDirectory}apk\";
  24. if (!Directory.Exists(apkDirs))
  25. {
  26. rslt.ErrMsg = "apk file folder not exists";
  27. return new JsonResult(rslt);
  28. }
  29. //cache file version
  30. string newVersion = string.Empty;
  31. string cacheKey = "NewestApkVersion";
  32. lock (_syncRoot)
  33. {
  34. newVersion = Cache.DefaultCache.Get(cacheKey) as string;
  35. if (string.IsNullOrEmpty(newVersion))
  36. {
  37. var dirinfo = new DirectoryInfo(apkDirs);
  38. var file = dirinfo.GetFiles()
  39. .Where(x => x.Name.EndsWith(".apk", StringComparison.CurrentCultureIgnoreCase))
  40. .OrderByDescending(x => x.LastWriteTime).FirstOrDefault();
  41. if (file == null)
  42. {
  43. rslt.ErrMsg = "can not found apk";
  44. return new JsonResult(rslt);
  45. }
  46. APKHelper apkHelper = new APKHelper();
  47. newVersion = apkHelper.GetVersionName(file.FullName);
  48. //TODO:文件夹缓存依赖不生效,待扩展
  49. Cache.DefaultCache.Add(cacheKey, newVersion, Cache.CreateCacheItemPolicy(null, DateTime.Now.AddMinutes(30), new List<string>() { file.FullName }));
  50. }
  51. }
  52. if (string.Compare(newVersion, request.CurrentVersion) > 0)
  53. {
  54. rslt.ErrCode = "1";
  55. rslt.NewVersion = newVersion;
  56. }
  57. return new JsonResult(rslt);
  58. }
  59. }
  60. }