From 618619e36d4be2c0a74e0f3b631f322d311d3ee5 Mon Sep 17 00:00:00 2001 From: Mikhail Date: Fri, 12 Jul 2024 07:56:43 -0400 Subject: [PATCH] fix static data download fail --- nksrv/Program.cs | 2 +- nksrv/StaticInfo/StaticDataParser.cs | 25 +++++++++++++++++++------ nksrv/Utils/AssetDownloadUtil.cs | 9 +++------ 3 files changed, 23 insertions(+), 13 deletions(-) diff --git a/nksrv/Program.cs b/nksrv/Program.cs index 4628b8b..9a7abe4 100644 --- a/nksrv/Program.cs +++ b/nksrv/Program.cs @@ -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) { diff --git a/nksrv/StaticInfo/StaticDataParser.cs b/nksrv/StaticInfo/StaticDataParser.cs index d8402d3..8f20213 100644 --- a/nksrv/StaticInfo/StaticDataParser.cs +++ b/nksrv/StaticInfo/StaticDataParser.cs @@ -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 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 diff --git a/nksrv/Utils/AssetDownloadUtil.cs b/nksrv/Utils/AssetDownloadUtil.cs index 7d90a2e..85eca9b 100644 --- a/nksrv/Utils/AssetDownloadUtil.cs +++ b/nksrv/Utils/AssetDownloadUtil.cs @@ -13,7 +13,7 @@ namespace nksrv.Utils public static readonly HttpClient AssetDownloader = new(new HttpClientHandler() { AutomaticDecompression = DecompressionMethods.All }); public static async Task 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);