NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Notice/NoticeManager.cs

138 lines
4.4 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using System;
using System.Collections.Generic;
using System.Text.RegularExpressions;
using Cysharp.Threading.Tasks;
using Gameplay.Net;
using Newtonsoft.Json;
using PhxhSDK;
using UnityEngine;
using UnityEngine.Networking;
public class NoticeManager : Singlenton<NoticeManager>
{
private const string NoticePost = "notices";
/// <summary>
/// 公告请求结果
/// </summary>
private class NoticeGetResult
{
public int code;
public string message;
public List<NoticeData> data;
}
private class NoticeData
{
public int id;
public string title;
public int type;
public string url;
public string cover;
public string content;
public int application_id;
public string created_at;
public string update_at;
}
private List<NoticeData> curNoticeData;
public async void GetNotice()
{
var requestUrl = AppConfig.Instance.LoginURL + NoticePost;
DebugUtil.Log("拉起公告请求地址: " + requestUrl);
try
{
var headData = PostHeader.PostHeaderInfo(new Dictionary<string, string>
{
{ "timestamp", DateTimeOffset.UtcNow.ToUnixTimeSeconds().ToString() }
});
var request = new UnityWebRequest(requestUrl, UnityWebRequest.kHttpVerbGET)
{
downloadHandler = new DownloadHandlerBuffer(),
};
request.SetRequestHeader("Content-Type", "application/json;charset=utf-8"); //为了保证客户端发送的json格式在后端能解析
request.SetRequestHeader("signature", headData["signature"]);
request.SetRequestHeader("timestamp", headData["timestamp"]);
request.SetRequestHeader("accessKey", headData["accessKey"]);
// 异步等待请求完成
await request.SendWebRequest();
if (request.result != UnityWebRequest.Result.Success)
{
DebugUtil.LogError(request.downloadHandler.text);
}
else
{
DebugUtil.Log("http消息请求成功!返回内容:\n" + request.downloadHandler.text);
var result = JsonConvert.DeserializeObject<NoticeGetResult>(request.downloadHandler.text);
if (result.code == 0)
{
curNoticeData = result.data;
ConvertNotice();
DebugUtil.Log("获取公告成功");
}
else
{
DebugUtil.LogError("获取公告失败");
}
}
}
catch (UnityWebRequestException e)
{
DebugUtil.LogError(e);
var pattern = @"\{.*\}";
var match = Regex.Match(e.Message, pattern);
if (match.Success)
{
var json = match.Value;
NoticeGetResult res = JsonConvert.DeserializeObject<NoticeGetResult>(json);
DebugUtil.LogError("请求失败, 服务器有错误响应: " + res.message);
}
else
{
DebugUtil.LogError("请求失败!");
}
}
}
private async void ConvertNotice()
{
foreach (var data in curNoticeData)
{
DebugUtil.Log("公告{0},下载链接:{1}", data.id, data.cover);
DebugUtil.Log("公告内容:{0}", data.content);
DownLoadImg(data.cover);
}
}
private async void DownLoadImg(string url)
{
try
{
using UnityWebRequest request = UnityWebRequestTexture.GetTexture(url);
var operation = request.SendWebRequest();
await operation.ToUniTask();
if (request.result == UnityWebRequest.Result.Success)
{
// 获取下载的纹理
var texture = DownloadHandlerTexture.GetContent(request);
if (texture != null)
DebugUtil.Log("公告图片下载成功!");
}
else
{
Debug.LogError($"公告图片下载失败: {request.error}");
}
}
catch (Exception e)
{
DebugUtil.LogError("NoticeManager.DownLoadImg error: {0}", e);
}
}
}