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; } = 30;
/// 最大重试次数
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;
}
}