NLDClient-yudde/ProjectNLD/Assets/Code/Scripts/Gameplay/Net/Client/AppConfig.cs

214 lines
6.8 KiB
C#
Raw Normal View History

2023-08-22 19:08:45 +08:00
//////////////////////////////////////////////////////////////////////////
//
// 文件Assets/Code/Scripts/Gameplay/Net/Client/AppConfig.cs
// 作者Xoen Xie
// 时间2023/07/19
// 描述app config
// 说明:
//
//////////////////////////////////////////////////////////////////////////
using Framework;
using UnityEngine;
using System.Collections.Generic;
using UnityEngine.Networking;
using System.Xml;
using System;
using System.IO;
using System.Text;
using Cysharp.Threading.Tasks;
2023-10-19 15:00:19 +08:00
using PhxhSDK;
2024-10-08 13:28:48 +08:00
using PhxhSDK.AOT.Net;
using PhxhSDK.AOT.PreConfig;
2023-08-22 19:08:45 +08:00
namespace Gameplay.Net
{
public struct AddrInfo
{
public string ip;
public uint port;
}
2023-11-20 18:46:43 +08:00
2023-08-22 19:08:45 +08:00
public struct ServerInfo
{
public string name;
public AddrInfo[] addrs;
}
2023-11-20 18:46:43 +08:00
public class CompulsoryUpdate
{
public bool NeedUpdate;
public Dictionary<string, string> AppUrl;
}
2023-12-05 18:45:58 +08:00
public class NoticeInfo
{
public string Title;
public string Content;
}
2024-10-08 13:28:48 +08:00
public sealed class AppConfig : Singlenton<AppConfig>, IInitable
2024-03-14 15:56:56 +08:00
{
2023-08-22 19:08:45 +08:00
private List<ServerInfo> m_ServerInfos;
2024-08-13 15:19:31 +08:00
public string LoginURL { get; private set; }
2023-11-20 18:46:43 +08:00
public CompulsoryUpdate UpdateInfo { get; private set; }
2023-12-05 18:45:58 +08:00
public List<NoticeInfo> NoticeInfos { get; private set; }
2023-08-22 19:08:45 +08:00
public ServerInfo Current { get; private set; }
public void Init()
{
string version = Application.version;
2023-10-19 15:00:19 +08:00
DebugUtil.Log("AppConfig Current App Version:{0}", version);
2023-08-22 19:08:45 +08:00
2024-09-10 16:38:03 +08:00
//m_sAppUrl = PreConfig.instance.appConfigUrl;
//DebugUtil.Log("AppConfig Current App Config Url:{0}", m_sAppUrl);
2023-08-22 19:08:45 +08:00
m_ServerInfos = new List<ServerInfo>();
}
public List<ServerInfo> GetServerInfo()
{
2023-11-20 18:46:43 +08:00
return m_ServerInfos;
2023-08-22 19:08:45 +08:00
}
public ServerInfo GetCurrent()
{
return Current;
}
public void Release()
{
}
2024-10-08 13:28:48 +08:00
public async UniTask<bool> UnityRequest()
2023-08-22 19:08:45 +08:00
{
2024-10-08 13:28:48 +08:00
var timeTick = DateTime.Now.Ticks;
var forceRequest = new ForceRequest(await PreConfig.instance.GetAppConfigUrl());
var result = await forceRequest.StartRequest();
var timeSpan = new TimeSpan(DateTime.Now.Ticks - timeTick);
2024-10-28 16:26:20 +08:00
DebugUtil.Log($"[AppConfig] DownloadConfig Time:{timeSpan.TotalMilliseconds} ms");
2023-08-22 19:08:45 +08:00
2024-10-08 13:28:48 +08:00
if (string.IsNullOrEmpty(result))
2023-08-22 19:08:45 +08:00
{
2024-10-08 13:28:48 +08:00
Debug.LogError("[AppConfig] Download Config Failed");
return false;
2023-08-22 19:08:45 +08:00
}
2024-10-08 13:28:48 +08:00
return OnServerInfo(result);
2023-08-22 19:08:45 +08:00
}
2024-10-08 13:28:48 +08:00
private bool OnServerInfo(string text)
2023-08-22 19:08:45 +08:00
{
var settings = new XmlReaderSettings();
settings.IgnoreComments = true;
2023-12-20 12:08:07 +08:00
2023-08-22 19:08:45 +08:00
var reader = XmlReader.Create(new MemoryStream(Encoding.UTF8.GetBytes(text)), settings);
var doc = new XmlDocument();
doc.Load(reader);
2023-11-20 18:46:43 +08:00
//获取强更信息
UpdateInfo = new CompulsoryUpdate();
var configNode = doc.SelectSingleNode("root/config");
UpdateInfo.NeedUpdate = bool.Parse(configNode.SelectSingleNode("AppUpdate").InnerText);
DebugUtil.Log("Need to force update:{0}", UpdateInfo.NeedUpdate);
if (UpdateInfo.NeedUpdate)
{
OpenNeedUpdateWindows();
2024-10-08 13:28:48 +08:00
return true;
}
2023-11-20 18:46:43 +08:00
var appUrls = configNode.SelectNodes("AppUrl/u");
UpdateInfo.AppUrl = new Dictionary<string, string>();
foreach (XmlNode urlNode in appUrls)
{
string type = urlNode.Attributes["type"].Value;
string data = urlNode.Attributes["data"].Value;
UpdateInfo.AppUrl.Add(type, data);
}
2024-08-13 15:19:31 +08:00
//获取手机登录域名
var LoginUrl = configNode.SelectSingleNode("LoginUrl");
LoginURL = LoginUrl.InnerText;
DebugUtil.Log("AppConfig LoginURL={0}", LoginURL);
2023-12-05 18:45:58 +08:00
//获取公告信息
NoticeInfos = new List<NoticeInfo>();
var noticeNode = doc.SelectSingleNode("root/notice");
if (noticeNode != null)
{
var noticeList = noticeNode.ChildNodes;
for (int i = 0; i < noticeList.Count; i++)
{
var noticeElement = noticeList[i] as XmlElement;
NoticeInfo noticeInfo = new NoticeInfo();
noticeInfo.Title = noticeElement.SelectSingleNode("title").InnerText;
noticeInfo.Content = noticeElement.SelectSingleNode("body").InnerText;
NoticeInfos.Add(noticeInfo);
}
}
2023-11-20 18:46:43 +08:00
2023-08-22 19:08:45 +08:00
var rootNode = doc.SelectSingleNode("root");
var nodeList = rootNode.SelectSingleNode("ServerList").ChildNodes;
for (var i = 0; i < nodeList.Count; ++i)
{
var ele = nodeList[i] as XmlElement;
ServerInfo sni;
sni.name = ele.GetAttribute("name");
sni.addrs = new AddrInfo[ele.ChildNodes.Count];
for (var J = 0; J < ele.ChildNodes.Count; J++)
{
var eleAddr = ele.ChildNodes[J] as XmlElement;
AddrInfo adi;
adi.ip = eleAddr.GetAttribute("ip");
string port = eleAddr.GetAttribute("port");
adi.port = Convert.ToUInt32(port);
sni.addrs[J] = adi;
}
2023-12-05 18:45:58 +08:00
foreach (var info in NoticeInfos)
{
DebugUtil.Log("AppConfig.NoticeInfo Title={0},Content={1}", info.Title, info.Content);
}
2023-10-19 15:00:19 +08:00
DebugUtil.Log("AppConfig.OnServerInfo name={0}, count={1} ip={2}, port={3}",
sni.name, sni.addrs.Length, sni.addrs[0].ip, sni.addrs[0].port);
2023-08-22 19:08:45 +08:00
m_ServerInfos.Add(sni);
}
2023-11-20 18:46:43 +08:00
if (EventManager.Instance != null)
2023-08-22 19:08:45 +08:00
EventManager.Instance.Send(EventManager.EventName.NetLoginServerInfo);
2024-10-08 13:28:48 +08:00
return true;
2023-08-22 19:08:45 +08:00
}
2023-11-20 18:46:43 +08:00
2023-08-22 19:08:45 +08:00
public void Select(int nIndex)
{
if (nIndex >= m_ServerInfos.Count)
{
Current = m_ServerInfos[0];
2023-11-20 18:46:43 +08:00
DebugUtil.LogError("AppConfig Select nIndex:{0} >= m_ServerInfos.Count:{1}, set default as 0", nIndex,
m_ServerInfos.Count);
2023-08-22 19:08:45 +08:00
return;
}
Current = m_ServerInfos[nIndex];
2023-10-19 15:00:19 +08:00
DebugUtil.Log("AppConfig Select name={0}, length={1}", Current.name, Current.addrs.Length);
2023-08-22 19:08:45 +08:00
}
2023-11-20 16:47:49 +08:00
private void OpenNeedUpdateWindows()
{
2024-05-16 12:40:15 +08:00
UIManager.Instance.CreateAndOpenWindow(UINameConst.UI_Update);
2023-11-20 16:47:49 +08:00
DebugUtil.LogError("需要下载正确客户端版本");
}
2023-08-22 19:08:45 +08:00
}
}