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);
|
|
|
|
|
|
Debug.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);
|
2023-12-18 13:15:00 +08:00
|
|
|
|
|
|
|
|
|
|
if (UpdateInfo.NeedUpdate)
|
|
|
|
|
|
{
|
|
|
|
|
|
OpenNeedUpdateWindows();
|
2024-10-08 13:28:48 +08:00
|
|
|
|
return true;
|
2023-12-18 13:15:00 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
|
}
|