初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器 HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块 Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚 AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
using System.IO;
|
||||
using System.Text;
|
||||
|
||||
namespace PCL.Network;
|
||||
|
||||
public static class ModNet
|
||||
{
|
||||
public const string netDownloadEnd = ".PCLDownloading";
|
||||
public static int NetTaskThreadLimit { get; set; } = 16;
|
||||
public static long NetTaskSpeedLimitLow { get; set; } = 256 * 1024L;
|
||||
public static long NetTaskSpeedLimitHigh { get; set; } = -1;
|
||||
public static long NetTaskSpeedLimitLeft { get; set; } = -1;
|
||||
public static int NetTaskThreadCount { get; set; }
|
||||
public static NetManager NetManager => NetManager.Instance;
|
||||
|
||||
public static object NetGetCodeByRequestRetry(string url, Encoding? encode = null, string accept = "",
|
||||
bool isJson = false, string? backupUrl = null, bool useBrowserUserAgent = false)
|
||||
{
|
||||
var param = new RequestParam
|
||||
{
|
||||
Encoding = encode,
|
||||
Accept = accept,
|
||||
FallbackUrl = backupUrl,
|
||||
UseBrowserUserAgent = useBrowserUserAgent,
|
||||
Timeout = 30000,
|
||||
Retries = 3
|
||||
};
|
||||
var result = Requester.FetchString(url, param);
|
||||
return isJson ? (object)ModBase.GetJson(result) : result;
|
||||
}
|
||||
|
||||
public static object NetGetCodeByRequestOnce(string url, Encoding? encode = null, int timeout = 30000,
|
||||
bool isJson = false, string accept = "", bool useBrowserUserAgent = false)
|
||||
{
|
||||
var param = new RequestParam
|
||||
{
|
||||
Encoding = encode,
|
||||
Accept = accept,
|
||||
UseBrowserUserAgent = useBrowserUserAgent,
|
||||
Timeout = timeout,
|
||||
Retries = 1
|
||||
};
|
||||
var result = Requester.FetchString(url, param);
|
||||
return isJson ? (object)ModBase.GetJson(result) : result;
|
||||
}
|
||||
|
||||
public static string NetGetCodeByLoader(string url, int timeout = 45000, bool isJson = false,
|
||||
bool useBrowserUserAgent = false)
|
||||
{
|
||||
return NetGetCodeByLoader(new[] { url }, timeout, isJson, useBrowserUserAgent);
|
||||
}
|
||||
|
||||
public static string NetGetCodeByLoader(IEnumerable<string> urls, int timeout = 45000, bool isJson = false,
|
||||
bool useBrowserUserAgent = false)
|
||||
{
|
||||
Exception? lastException = null;
|
||||
|
||||
foreach (var url in urls)
|
||||
{
|
||||
try
|
||||
{
|
||||
var content = Requester.Fetch(url, new FetchParam
|
||||
{
|
||||
Method = "GET",
|
||||
Timeout = timeout,
|
||||
UseBrowserUserAgent = useBrowserUserAgent
|
||||
});
|
||||
|
||||
return isJson ? ModBase.GetJson(content).ToString() : content;
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
lastException = ex;
|
||||
ModBase.Log(ex, $"[Fetch] 获取文件内容失败,尝试下一个源:{url}", ModBase.LogLevel.Debug);
|
||||
}
|
||||
}
|
||||
|
||||
throw new Exception("无法获取文件内容", lastException);
|
||||
}
|
||||
|
||||
public static string NetRequestRetry(string url, string method, string data = "", string? contentType = null,
|
||||
Encoding? encoding = null, string? accept = null, bool useBrowserUserAgent = false)
|
||||
{
|
||||
return Requester.Fetch(url, new FetchParam
|
||||
{
|
||||
Method = method,
|
||||
Content = data,
|
||||
ContentType = contentType,
|
||||
Encoding = encoding,
|
||||
Accept = accept,
|
||||
UseBrowserUserAgent = useBrowserUserAgent,
|
||||
Timeout = 30000
|
||||
});
|
||||
}
|
||||
|
||||
public static string NetRequestOnce(string url, string method, string data = "", string? contentType = null,
|
||||
Encoding? encoding = null, string? accept = null, bool useBrowserUserAgent = false)
|
||||
{
|
||||
return NetRequestRetry(url, method, data, contentType, encoding, accept, useBrowserUserAgent);
|
||||
}
|
||||
|
||||
public static Task NetDownloadByClient(string url, string localFile, bool useBrowserUserAgent = false)
|
||||
{
|
||||
return FileDownloader.DownloadAsync(url, localFile, useBrowserUserAgent);
|
||||
}
|
||||
|
||||
public static void NetDownloadByLoader(string url, string localFile, ModLoader.LoaderBase? loaderToSyncProgress = null,
|
||||
ModBase.FileChecker? check = null, bool useBrowserUserAgent = false)
|
||||
{
|
||||
FileDownloader.DownloadAsync(url, localFile, useBrowserUserAgent).GetAwaiter().GetResult();
|
||||
}
|
||||
|
||||
public static void NetDownloadByLoader(IEnumerable<string> urls, string localFile,
|
||||
ModLoader.LoaderBase? loaderToSyncProgress = null, ModBase.FileChecker? check = null,
|
||||
bool useBrowserUserAgent = false)
|
||||
{
|
||||
FileDownloader.DownloadAsync(urls, localFile, useBrowserUserAgent).GetAwaiter().GetResult();
|
||||
}
|
||||
|
||||
public static bool HasDownloadingTask(bool ignoreCustomDownload = false)
|
||||
{
|
||||
foreach (var task in ModLoader.loaderTaskbar.ToList())
|
||||
{
|
||||
if (task.show && task.State == ModBase.LoadState.Loading &&
|
||||
(!ignoreCustomDownload || !task.name.Contains("自定义下载")))
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user