using asap.core; using asap.playfab.async; using PlayFab.ClientModels; using System.Threading.Tasks; using UniRx; using UnityEngine; namespace game { public class TitleNewsEvent { public TaskCompletionSource titleNewsItemAwait = new TaskCompletionSource(); public TitleNewsItem titleNewsItem; public bool show; } public class TileNewsManager { public TitleNewsItem News; public TileNewsManager() { News = null; GContext.OnEvent().Subscribe(ReadTitleNews); } async void ReadTitleNews(TitleNewsEvent titleNewsEvent) { titleNewsEvent.titleNewsItem = News; bool isRod = false; GetTitleNewsResult result = GContext.container.Resolve() is KvUserService ? await GetKVTitleNewsAsync() : await PlayFabClientAsyncAPI.GetTitleNewsAsync(new PlayFab.ClientModels.GetTitleNewsRequest()); if (result != null && result.News != null && result.News.Count > 0) { News = result.News[0]; string newsValue = PlayerPrefs.GetString("TitleNewsEvent"); string timeStr = News.Timestamp.ToString(); if (newsValue != timeStr) { IUserService userService = GContext.container.Resolve(); if (userService.CreateTime < News.Timestamp) { isRod = true; } } titleNewsEvent.titleNewsItemAwait.SetResult(result.News[0]); } else { News = null; titleNewsEvent.titleNewsItemAwait.SetResult(null); } if (titleNewsEvent.show) { if (News != null) { PlayerPrefs.SetString("TitleNewsEvent", News.Timestamp.ToString()); } isRod = false; } RedPointManager.Instance.SetRedPointState(RedPointName.Announcement, isRod); } private async Task GetKVTitleNewsAsync() { string body = await GContext.container.Resolve().CommonDataRequest("GetTitleNews", new { }); if (string.IsNullOrEmpty(body)) { return null; } try { var response = Newtonsoft.Json.JsonConvert.DeserializeObject(body); if (response == null || response.Code != 1 || response.News == null || (response.News.Count > 0 && response.News[0] == null)) { return null; } return new GetTitleNewsResult { News = response.News }; } catch (Newtonsoft.Json.JsonException ex) { Debug.LogWarning("KV title news response: " + ex.GetType().Name); return null; } } private sealed class KvTitleNewsResponse { public int Code; public System.Collections.Generic.List News; } } }