Files
MRCC/launcher/PCL-CE/Plain Craft Launcher 2/Modules/Network/Facade/ModNet.cs
T
xyou f70b061d1a
CI / Go Backend (push) Canceled after 0s
feat: 项目初始化 + 3D方块世界原型 + AI助搭系统
初始化 monorepo: Go后端(7微服务) + Unity客户端(9模块) + 启动器

HTML5原型: Three.js 3D体素世界, Perlin噪声地形, 原版材质, 22种方块

Minecraft创造模式背包: 双栏布局, 拖拽移动物品, 方向性元件引脚

AI助搭策划文档 + 客户端/服务端骨架 + Docker Compose + CI
2026-08-08 14:07:56 +08:00

131 lines
4.8 KiB
C#

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;
}
}