68 lines
2.3 KiB
C#
68 lines
2.3 KiB
C#
using Luban.Common.Protos;
|
|
using Luban.Common.Utils;
|
|
using Luban.Server.Common;
|
|
using System;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace Luban.Job.Common.Utils
|
|
{
|
|
public static class CacheFileUtil
|
|
{
|
|
private static readonly NLog.Logger s_logger = NLog.LogManager.GetCurrentClassLogger();
|
|
|
|
public static async Task<byte[]> GetFileAsync(Bright.Net.ServiceModes.Managers.SessionBase session, string file, string md5)
|
|
{
|
|
var fileCache = CacheManager.Ins.FindCache(md5);
|
|
if (fileCache != null)
|
|
{
|
|
s_logger.Trace("find file:{file} md5:{md5} in cache.", file, md5);
|
|
return fileCache.Content;
|
|
}
|
|
else
|
|
{
|
|
var res = await session.CallRpcAsync<GetInputFile, GetInputFileArg, GetInputFileRes>(new GetInputFileArg() { File = file }, 30);
|
|
CacheManager.Ins.AddCache(file, md5, res.Content);
|
|
return res.Content;
|
|
}
|
|
}
|
|
|
|
public static string GenStringOrBytesMd5AndAddCache(string fileName, object content)
|
|
{
|
|
switch (content)
|
|
{
|
|
case string s: return GenMd5AndAddCache(fileName, s);
|
|
case byte[] bs: return GenMd5AndAddCache(fileName, bs);
|
|
default: throw new System.NotSupportedException();
|
|
}
|
|
}
|
|
|
|
public static string GenMd5AndAddCache(string fileName, string content, bool withUtf8Bom = false)
|
|
{
|
|
content = content.Replace("\r\n", "\n");
|
|
byte[] bytes;
|
|
if (!withUtf8Bom)
|
|
{
|
|
bytes = System.Text.Encoding.UTF8.GetBytes(content);
|
|
}
|
|
else
|
|
{
|
|
bytes = new byte[System.Text.Encoding.UTF8.GetByteCount(content) + 3 /* bom header */];
|
|
bytes[0] = 0xef;
|
|
bytes[1] = 0xbb;
|
|
bytes[2] = 0xbf;
|
|
System.Text.Encoding.UTF8.GetBytes(content, bytes.AsSpan(3));
|
|
}
|
|
var md5 = FileUtil.CalcMD5(bytes);
|
|
CacheManager.Ins.AddCache(fileName, md5, bytes);
|
|
return md5;
|
|
}
|
|
|
|
public static string GenMd5AndAddCache(string fileName, byte[] bytes)
|
|
{
|
|
var md5 = FileUtil.CalcMD5(bytes);
|
|
CacheManager.Ins.AddCache(fileName, md5, bytes);
|
|
return md5;
|
|
}
|
|
}
|
|
}
|