using DidabuCloud.Unity.Core.NetWorking; using Mogafa.App.AppDatas; using Mogafa.Common; using Mogafa.Common.HttpClients; using Newtonsoft.Json; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DidabuCloud.Unity.Core { public partial class Didabu : MogafaBase { private readonly string appDataFileName = "DidabuAppData"; private UserAppData appData; public event AppDataChangedHandler AppDataChanged; internal string GetAppDataLeaderboardsUrl { get { return BaseUrl + "account/appDataLeaderboard"; } } internal string PostAppDataUrl { get { return BaseUrl + "account/appData"; } } private UserAppData GetAppData() { UserAppData appData = null; var path = Path.Combine(UnityEngine.Application.persistentDataPath, $"{appDataFileName}.dat"); if (!File.Exists(path)) { return appData; } try { var json = File.ReadAllText(path); appData = JsonConvert.DeserializeObject(json); appData.AppDataChanged += AppDataChangedInternal; } catch (Exception ex) { Logger.LogError($"Read config from file error, file:{path}\nmessge:{ex.Message}"); } return appData; } private async void AppDataChangedInternal(string code, long newValue, long oldValue) { if (appData != null) { var dto = new UpdateAppDataDto() { AccountId = this.User.DidabuId, AppId = this.AppId, Code = code, Value = newValue }; var response = await HttpUtility.Post(PostAppDataUrl, JsonConvert.SerializeObject(dto)); if (!response.IsSuccessful) { Logger.LogError($"Report user info error:{response.Message}"); } } try { AppDataChanged?.Invoke(code, newValue, oldValue); } catch (Exception ex) { Logger.LogError($"App data changed event process failed, error:{ex.Message}"); } } private void SaveAppData() { if (appData == null) { return; } var path = Path.Combine(UnityEngine.Application.persistentDataPath, $"{appDataFileName}.dat"); try { var json = JsonConvert.SerializeObject(appData); File.WriteAllText(path, json); } catch (Exception ex) { Logger.LogError($"Save app data to file error,file:{path}\nmessage:{ex.Message}"); } } public void SetAppData(string code, long value, string source = "", string sourceId = "") { if (appData == null) { appData = GetAppData(); } if (appData == null) { appData = new UserAppData(); appData.AppDataChanged += AppDataChangedInternal; } appData.Set(code, value, source, sourceId); SaveAppData(); return; } public long GetAppData(string code) { if (appData == null) { return 0L; } return appData.GetAppData(code); } public async Task> GetAppDataLeaderboard(string code, bool isDesc = false) { var desc = isDesc ? "desc" : ""; var url = $"{GetAppDataLeaderboardsUrl}?code={code}&appId={AppId}&desc={desc}"; var leaderboards = new List(); var response = await HttpUtility.Get>(url); if (response.Code == HttpStatusCodes.OK && response.IsSuccessful) { leaderboards = response.Data; } else { Logger.LogError($"get app data leaderboards error:{response.Message}"); } return leaderboards; } } }