Unity-Http协议请求下载系列1:接口封装HttpHelper

40 篇文章 3 订阅

游戏请求服务器下载资源,是很常见的操作。特别是有热更的资源游戏,游戏启动会检查下载Bundle资源。使用的是Http协议。本人查看很多资料,实现服务器请求下载资源的方式大概有2种,其一是NET框架提供的HttpWebRequest接口,另外就是Unit引擎提供的UnityWebRequest接口。另外,是否支持断点续传。本人整合封装了上述2中实现方式,并且支持完全重新下载和断点续传2种下载模式。

    这篇文章主要介绍实现Http请求的接口封装类:HttpHelper

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*
 * Author:W
 * Web请求工具
 */
namespace W.GameFramework.HotUpdate
{
	/// <summary>
	/// 下载方式:重新或者断点续传
	/// </summary>
	public enum DownloadType
	{
		New,//重新下载
	    Continue,//断点续传下载
	}
	/// <summary>
	/// 开始下载回调
	/// </summary>
	public delegate void OnDownloadBeginHandler();
	/// <summary>
	/// 下载进度回调
	/// </summary>
	/// <param name="url"></param>
	/// <param name="progress"></param>
	public delegate void OnDownloadProgressHanlder(float progress);
	/// <summary>
	/// 下载结束回调
	/// </summary>
	public delegate void OnDownloadEndHandler();
	/// <summary>
	/// 下载错误
	/// </summary>
	public delegate void OnDownloadErrorHandler(string errorCode);

	public  class HttpHelper
	{
		/// <summary>
		/// 当前下载资源资源URL地址
		/// </summary>
		public  string url;
		/// <summary>
		/// 当前下载资源的保存路径
		/// </summary>
		public string path;


		private float _progress = 0f;
		/// <summary>
		/// 当前下载的进度
		/// </summary>
		protected float progress
		{
			get { return _progress; }

			set 
			{
				_progress = value;

				if (OnDownloadProgressHanlder != null)
					OnDownloadProgressHanlder(value);
			}
		}

		/// <summary>
		/// 文件当前已下载的长度
		/// </summary>
		protected long fileCurLength = 0;
		/// <summary>
		/// 当前下载文件的总长度
		/// </summary>
		protected long fileLength = 0;


		/// <summary>
		/// 请求时间
		/// </summary>
		protected int timeOut = 100000;
		/// <summary>
		/// 请求方式
		/// </summary>
		protected string method = "GET";

		private bool _isStop = false;
		/// <summary>
		/// 是否暂停
		/// </summary>
		public bool IsStop
		{
			get { return this._isStop; }

			set { this._isStop = value; }
		}

		/// <summary>
		/// 请求下载方式
		/// </summary>
		protected DownloadType downloadType = DownloadType.New;

		/// <summary>
		/// 下载开始回调
		/// </summary>
		protected OnDownloadBeginHandler OnDownloadBeginHandler;
		/// <summary>
		/// 下载结束回调
		/// </summary>
		protected OnDownloadEndHandler OnDownloadEndHandler;

		/// <summary>
		/// 下载进度回调
		/// </summary>
		protected OnDownloadProgressHanlder OnDownloadProgressHanlder;

		/// <summary>
		/// 下载错误异常回调
		/// </summary>
		protected OnDownloadErrorHandler OnDownloadErrorHandler;



		/// <summary>
		/// 向服务器发出请求下载url资源
		/// </summary>
		/// <param name="url">资源网络地址</param>
		/// <param name="path">资源保存路径</param>
		/// <param name="downloadType">下载方式:重新下载或断点续传</param>
		/// <param name="onDownloadBeginHandler">下载开始回调</param>
		/// <param name="onDownloadEndHandler">下载完成回调</param>
		/// <param name="onDownloadErrorHandler">下载错误回调</param>
		public virtual void SendHttpRequest(string url, string path,DownloadType downloadType = DownloadType.New, OnDownloadBeginHandler onDownloadBeginHandler = null, OnDownloadEndHandler onDownloadEndHandler = null,
			OnDownloadProgressHanlder onDownloadProgressHanlder = null,OnDownloadErrorHandler onDownloadErrorHandler = null)
		{
			this.url = url;
			this.path = path;
			this.downloadType = downloadType;
			this.OnDownloadBeginHandler = onDownloadBeginHandler;
			this.OnDownloadEndHandler = onDownloadEndHandler;
			this.OnDownloadProgressHanlder = onDownloadProgressHanlder;
			this.OnDownloadErrorHandler = onDownloadErrorHandler;
		}

		/// <summary>
		/// 清理
		/// </summary>
		public virtual void Clear() { }
	}
}

下篇文章链接https://blog.csdn.net/wlqchengzhangji/article/details/118704311

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
如果你需要在 Unity WebGL 中从服务器接收这些数据并进行处理,可以使用以下代码: ```csharp using System; using UnityEngine.Networking; public class Example : MonoBehaviour { public string url; // 服务器地址 public string starttime = "2023-05-07 09:54:22"; public string endtime = "2023-06-07 09:54:22"; IEnumerator Start() { // 创建一个 UnityWebRequest 对象 UnityWebRequest request = UnityWebRequest.Get(url); // 发送请求并等待服务器响应 yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.ConnectionError || request.result == UnityWebRequest.Result.ProtocolError) { // 请求失败,输出错误信息 Debug.Log(request.error); } else { // 请求成功,从响应数据中获取 starttime 和 endtime string responseText = request.downloadHandler.text; // 假设响应数据为 JSON 格式,可以使用 JsonUtility 来解析 ResponseData responseData = JsonUtility.FromJson<ResponseData>(responseText); starttime = responseData.starttime; endtime = responseData.endtime; // 将字符串类型的 starttime 和 endtime 转换为 DateTime 类型 DateTime startTime = DateTime.ParseExact(starttime, "yyyy-MM-dd HH:mm:ss", null); DateTime endTime = DateTime.ParseExact(endtime, "yyyy-MM-dd HH:mm:ss", null); // 计算时间差 TimeSpan duration = endTime - startTime; // 输出时间差 Debug.Log(duration); } } [Serializable] private class ResponseData { public string starttime; public string endtime; } } ``` 在这个示例中,我们使用 UnityWebRequest 来向服务器发送请求,并等待服务器的响应。如果请求失败,我们将会输出错误信息;如果请求成功,我们将会从响应数据中获取 starttime 和 endtime,并计算它们之间的时间差。需要注意的是,在这个示例中,我们假设响应数据为 JSON 格式,可以使用 `JsonUtility` 来解析。如果响应数据不是 JSON 格式,你需要使用其他方法来解析响应数据。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Data菌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值