1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- using LJLib;
- using LJProxy.LJLib.Net.SPI.Server;
- using LJProxy.Models;
- using System;
- using System.Collections.Generic;
- using System.IO;
- using System.Linq;
- using System.Threading.Tasks;
- namespace LJProxy.Excutor
- {
- public class GetUpdatePkgExcutor : ExcutorBase<GetUpdatePkgRequest, GetUpdatePkgResponse>
- {
- private static object _syncRoot = new object();
- protected override void ExcuteInternal(GetUpdatePkgRequest request, object state, GetUpdatePkgResponse rslt)
- {
- rslt.ErrCode = "0";
- var apkDirs = @$"{AppDomain.CurrentDomain.BaseDirectory}apk\";
- if (!Directory.Exists(apkDirs))
- {
- rslt.ErrMsg = "apk file folder not exists";
- return;
- }
- //cache file version
- ApkInfo apkInfo = null;
- string cacheKey = "NewestApkData";
- lock (_syncRoot)
- {
- apkInfo = CacheHelper.DefaultCache.Get(cacheKey) as ApkInfo;
- 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;
- }
- 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 clientVer = apkHelper.GetVersionName(apkData);
- apkInfo = new ApkInfo();
- apkInfo.Version = clientVer;
- apkInfo.ApkData = apkData;
- //TODO:文件夹缓存依赖不生效,待扩展
- CacheHelper.DefaultCache.Add(cacheKey, apkInfo, CacheHelper.CreateCacheItemPolicy(null, DateTime.Now.AddMinutes(30), new List<string>() { file.FullName }));
- }
- }
- rslt.Version = apkInfo.Version;
- rslt.ApkData = apkInfo.ApkData;
- }
- public class ApkInfo
- {
- public string Version { get; set; }
- public byte[] ApkData { get; set; }
- }
- }
- }
|