Files
ft/Client/Assets/Scripts/Services/TileNewsManager.cs

93 lines
3.2 KiB
C#

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<TitleNewsItem> titleNewsItemAwait = new TaskCompletionSource<TitleNewsItem>();
public TitleNewsItem titleNewsItem;
public bool show;
}
public class TileNewsManager
{
public TitleNewsItem News;
public TileNewsManager()
{
News = null;
GContext.OnEvent<TitleNewsEvent>().Subscribe(ReadTitleNews);
}
async void ReadTitleNews(TitleNewsEvent titleNewsEvent)
{
titleNewsEvent.titleNewsItem = News;
bool isRod = false;
GetTitleNewsResult result = GContext.container.Resolve<IUserService>() 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<IUserService>();
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<GetTitleNewsResult> GetKVTitleNewsAsync()
{
string body = await GContext.container.Resolve<ICustomServerMgr>().CommonDataRequest("GetTitleNews", new { });
if (string.IsNullOrEmpty(body))
{
return null;
}
try
{
var response = Newtonsoft.Json.JsonConvert.DeserializeObject<KvTitleNewsResponse>(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<TitleNewsItem> News;
}
}
}