using System; using System.Collections.Generic; using System.Threading; using UnityEngine; namespace Kill.Network { /// /// HTTP请求方法枚举 /// public enum HttpMethod { GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS } /// /// 网络连接状态 /// public enum NetworkConnectivityState { /// 无网络连接 Disconnected, /// 通过WiFi连接 Wifi, /// 通过移动数据连接 Cellular, /// 未知连接类型 Unknown } /// /// 请求优先级 /// public enum RequestPriority { Low = 0, Normal = 1, High = 2, Critical = 3 } /// /// HTTP响应包装类 /// public class HttpResponse { /// 是否请求成功 public bool IsSuccess { get; set; } /// HTTP状态码 public long StatusCode { get; set; } /// 响应数据 public T Data { get; set; } /// 错误信息 public string ErrorMessage { get; set; } /// 响应头 public Dictionary Headers { get; set; } /// 原始响应文本 public string RawResponse { get; set; } /// 请求耗时(毫秒) public long ElapsedMilliseconds { get; set; } public static HttpResponse Success(T data, long statusCode = 200) { return new HttpResponse { IsSuccess = true, StatusCode = statusCode, Data = data }; } public static HttpResponse Failure(string errorMessage, long statusCode = 0) { return new HttpResponse { IsSuccess = false, StatusCode = statusCode, ErrorMessage = errorMessage }; } } /// /// HTTP请求配置 /// public class HttpRequestConfig { /// 请求超时时间(秒) public int Timeout { get; set; } = 10; /// 最大重试次数 public int MaxRetries { get; set; } = 3; /// 重试延迟基数(毫秒) public int RetryDelayMs { get; set; } = 1000; /// 是否使用指数退避 public bool UseExponentialBackoff { get; set; } = true; /// 自定义请求头 public Dictionary Headers { get; set; } = new Dictionary(); /// 请求优先级 public RequestPriority Priority { get; set; } = RequestPriority.Normal; /// 是否缓存响应 public bool EnableCache { get; set; } = false; /// 缓存时间(秒) public int CacheDuration { get; set; } = 300; } /// /// 网络请求任务 /// public class NetworkRequestTask { public string Id { get; private set; } public string Url { get; set; } public HttpMethod Method { get; set; } public object Data { get; set; } public HttpRequestConfig Config { get; set; } public RequestPriority Priority { get; set; } public DateTime CreateTime { get; private set; } public CancellationTokenSource CancellationToken { get; set; } public NetworkRequestTask() { Id = Guid.NewGuid().ToString("N"); CreateTime = DateTime.Now; CancellationToken = new CancellationTokenSource(); } } /// /// 网络状态变化事件参数 /// public class NetworkStateChangedEventArgs : EventArgs { public NetworkConnectivityState PreviousState { get; set; } public NetworkConnectivityState CurrentState { get; set; } public bool IsConnected { get; set; } public DateTime ChangeTime { get; set; } } /// /// 下载进度信息 /// public class DownloadProgress { /// 已下载字节数 public long DownloadedBytes { get; set; } /// 总字节数 public long TotalBytes { get; set; } /// 下载速度(字节/秒) public float Speed { get; set; } /// 预计剩余时间(秒) public float RemainingSeconds { get; set; } /// 下载进度(0-1) public float Progress => TotalBytes > 0 ? (float)DownloadedBytes / TotalBytes : 0; /// 进度百分比 public float ProgressPercentage => Progress * 100; } /// /// 上传进度信息 /// public class UploadProgress { /// 已上传字节数 public long UploadedBytes { get; set; } /// 总字节数 public long TotalBytes { get; set; } /// 上传速度(字节/秒) public float Speed { get; set; } /// 上传进度(0-1) public float Progress => TotalBytes > 0 ? (float)UploadedBytes / TotalBytes : 0; } }