93 lines
3.2 KiB
C#
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;
|
|
}
|
|
}
|
|
}
|