killapp/Assets/Scripts/Network/NetworkModels.cs

179 lines
5.5 KiB
C#
Raw Permalink Normal View History

2026-04-16 14:57:19 +08:00
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>
2026-06-17 17:37:49 +08:00
public int Timeout { get; set; } = 10;
2026-04-16 14:57:19 +08:00
/// <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;
}
}