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