WebRequest网络请求简介
WebRequest网络请求主要用于与web服务器通信,比如请求某一网络链接或服务器接口,获得回复或下载网络上的资源。
WebRequest的使用策略是:新建网络接口 => 注册网络接口 => 请求网络接口 。
使用WebRequest
新建网络接口
目前有四种网络接口类型:
1.WebInterfacePost(请求一个网络接口并提交表单)
2.WebInterfaceGetAudioClip(请求一个网络接口并获得AudioClip类型的值回复)
3.WebInterfaceGetString(请求一个网络接口并获得String类型的值回复)
4.WebInterfaceGetTexture2D(请求一个网络接口并获得Texture2D类型的值回复)
新建的网络接口必须继承至网络接口基类:
/// <summary>
/// 网络接口基类
/// </summary>
public abstract class WebInterfaceBase : IReference
{
/// <summary>
/// 接口名称
/// </summary>
public string Name;
/// <summary>
/// 接口Url
/// </summary>
public string Url;
/// <summary>
/// 是否是离线接口
/// </summary>
public bool IsOffline = false;
/// <summary>
/// 离线模式处理者
/// </summary>
public HTFAction OfflineHandler;
/// <summary>
/// 请求完成
/// </summary>
/// <param name="handler">下载助手</param>
public abstract void OnRequestFinished(DownloadHandler handler);
/// <summary>
/// 设置下载助手
/// </summary>
/// <param name="request">网络请求的实例</param>
public abstract void OnSetDownloadHandler(UnityWebRequest request);
/// <summary>
/// 获取下载的字符串
/// </summary>
/// <param name="handler">下载助手</param>
/// <returns>下载的字符串</returns>
public abstract string OnGetDownloadString(DownloadHandler handler);
/// <summary>
/// 重置
/// </summary>
public abstract void Reset();
}
在OnRequestFinished实现方法中对请求结果进行处理,比如WebInterfaceGetString接口类型:
/// <summary>
/// 网络接口:获取字符串
/// </summary>
public sealed class WebInterfaceGetString : WebInterfaceBase
{
public HTFAction<string> Handler;
public override void OnRequestFinished(DownloadHandler handler)
{
if (handler == null)
{
Handler?.Invoke("");
}
else
{
Handler?.Invoke(handler.text);
}
}
public override void OnSetDownloadHandler(UnityWebRequest request)
{
}
public override string OnGetDownloadString(DownloadHandler handler)
{
return handler.text;
}
public override void Reset()
{
OfflineHandler = null;
Handler = null;
}
}
注册网络接口
使用全局唯一的名称来注册网络接口:
private void Start()
{
Main.m_WebRequest.RegisterInterface("用户登录", @"https://www.htgameserver.com/login", LoginHandler, LoginOfflineHandler);
}
private void LoginHandler(string content)
{
GlobalTools.LogInfo("登录成功!" + content);
//进入场景
InitScene();
}
private void LoginOfflineHandler()
{
GlobalTools.LogInfo("离线模式,直接进入!");
//进入场景
InitScene();
}
注册接口时的第四个参数LoginOfflineHandler为离线模式时请求此接口的替代处理者,如果当前是离线模式,任何请求将总是进入LoginOfflineHandler方法!(在属性面板勾选IsOfflineState将开启离线模式)
如果未设计离线模式,这个参数默认为空。
请求网络接口
请求网络接口将变得极其简单:
private void Start()
{
Main.m_WebRequest.RegisterInterface("用户登录", @"https://www.htgameserver.com/login", LoginHandler, LoginOfflineHandler);
Main.m_WebRequest.RegisterInterface("拉取玩家信息", @"https://www.htgameserver.com/core/getplayer", GetPlayerHandler);
}
private void LoginHandler(string content)
{
if (content == "200")
{
GlobalTools.LogInfo("登录成功!" + content);
//发起【拉取玩家信息】请求
Main.m_WebRequest.SendRequest("拉取玩家信息");
//进入场景
InitScene();
}
else
{
GlobalTools.LogInfo("登录失败!" + content);
}
}
private void LoginOfflineHandler()
{
GlobalTools.LogInfo("离线模式,直接进入!");
//进入场景
InitScene();
}
private void Update()
{
//鼠标左键双击登录
if (Main.m_Input.GetButtonDown(InputButtonType.MouseLeftDoubleClick))
{
//发起【用户登录】请求,模拟用户【张三】
Main.m_WebRequest.SendRequest("用户登录", "username=张三", "password=55668899");
}
}
让接口离线
任何接口,我们都可以自由的设置其是否为离线接口,即便是在非离线模式:
private void Start()
{
//设置接口 【用户登录】 为离线接口,所有调用该接口的请求将自动使用离线模式处理
Main.m_WebRequest.GetInterface("用户登录").IsOffline = true;
}
运行时检视面板
在编辑器中运行时将会出现运行时检视面板(Runtime Data),主要用以调试或数据监测,目前面板如下:
1.Web Interfaces:当前注册的所有接口清单。