fix static data download fail

This commit is contained in:
Mikhail
2024-07-12 07:56:43 -04:00
parent 3ddbe47b7b
commit 618619e36d
3 changed files with 23 additions and 13 deletions

View File

@@ -169,7 +169,7 @@ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
public static string GetCachePathForPath(string path)
{
return AppDomain.CurrentDomain.BaseDirectory + "cache" + path;
return AppDomain.CurrentDomain.BaseDirectory + "cache/" + path;
}
private static async Task HandleAsset(IHttpContext ctx)
{

View File

@@ -38,7 +38,19 @@ namespace nksrv.StaticInfo
};
// Fields
public static StaticDataParser Instance;
private static StaticDataParser? _instance;
public static StaticDataParser Instance
{
get
{
if (_instance == null)
{
_instance = BuildAsync().Result;
}
return _instance;
}
}
private ZipFile MainZip;
private MemoryStream ZipStream;
private JArray questDataRecords;
@@ -50,15 +62,16 @@ namespace nksrv.StaticInfo
private JArray characterTable;
private JArray tutorialTable;
static StaticDataParser()
static async Task<StaticDataParser> BuildAsync()
{
Logger.Info("Loading static data");
Load().Wait();
if (Instance == null) throw new Exception("static data load fail");
await Load();
Logger.Info("Parsing static data");
Instance.Parse().Wait();
await Instance.Parse();
return Instance;
}
public StaticDataParser(string filePath)
{
if (!File.Exists(filePath)) throw new ArgumentException("Static data file must exist", nameof(filePath));
@@ -198,7 +211,7 @@ namespace nksrv.StaticInfo
var targetFile = await AssetDownloadUtil.DownloadOrGetFileAsync(StaticDataUrl, CancellationToken.None);
if (targetFile == null) throw new Exception("static data download fail");
Instance = new(targetFile);
_instance = new(targetFile);
}
#endregion

View File

@@ -13,7 +13,7 @@ namespace nksrv.Utils
public static readonly HttpClient AssetDownloader = new(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.All });
public static async Task<string?> DownloadOrGetFileAsync(string url, CancellationToken cancellationToken)
{
var rawUrl = url.Replace("https://cloud.nikke-kr.com", "");
var rawUrl = url.Replace("https://cloud.nikke-kr.com/", "");
string targetFile = Program.GetCachePathForPath(rawUrl);
var targetDir = Path.GetDirectoryName(targetFile);
if (targetDir == null)
@@ -27,12 +27,9 @@ namespace nksrv.Utils
{
Logger.Info("Download " + targetFile);
// TODO: Ip might change for cloud.nikke-kr.com
string @base = rawUrl.StartsWith("/prdenv") ? "prdenv" : "media";
if (rawUrl.StartsWith("/PC"))
@base = "PC";
var requestUri = new Uri("https://35.190.17.65/" + @base + rawUrl);
var requestUri = new Uri("https://35.190.17.65/" + rawUrl);
using var request = new HttpRequestMessage(HttpMethod.Get, requestUri);
request.Headers.TryAddWithoutValidation("host", "cloud.nikke-kr.com");
using var response = await AssetDownloader.SendAsync(request);