Unity中使用协程进行服务端数据验证手段
近期在做项目中的个人中心的一些事情,用户头像上传,下载,本地缓存,二级缓存,压缩,这些都要做,麻雀虽小五脏俱全啊,也是写的浑浑噩噩的,
当我们在上传用户头像的时候,向服务端发送上传头像请求之前,一般都会做一次验证,向服务端获取token验证信息,来确保非法上传,如果不做这个那么会有非法用户上传非法图像,使你的服务器
带来未知的灾难。
而验证的逻辑很好写,并没有什么难度,比如:
Server.SendMessage("获取token");
Client.Receive(string token)
{
Print(token);
if(token != 本地token)
{
Server.SendMessage("获取token");重新获取token
}
}
看样子很简单,可是一般客户端在接收服务端回过来的消息时,都会有一个协议分发的阶段,然后你的接收token的代码就会放到协议分发的那里,或者在协议分发的地方去调用,如果严重不通过,
重新走一遍这个流程,一直到严重用过,有点类似递归,是不是感觉有点傻傻的方式?
确实,这样做很不优雅,如果不做好注释的话,会让人摸不到头绪,下面用一个很不错的办法来实现,那就是使用协程
/// <summary>
/// 用于获取token的迭代器对象
/// </summary>
public class TokenVerificationOperation : IEnumerator {
public bool MoveNext(){
//Debug.logger.Log(IsDown);
return !IsDown;
}
public TokenVerificationOperation() {
ZoneServerRequeset.SendPortraitTokenReq();
}
public void Reset(){
}
public void OnToken(string token){
IsDown = true;
Token = token;
}
public bool IsDown { get; set; }
public string Token { get; set; }
public object Current { get { return null; } }
}
使用时候
public IEnumerator TokenJY()
{
TokenOperation = new TokenVerificationOperation();
yield return mb.StartCoroutine(TokenOperation);
if(TokenOperation .Token){
StartCoroutine(TokenJY);
}
}
是不是感觉这个办法,很不错,至少不用到处写代码到处找了,直接一个函数里面搞定,其实原理很简单,Unity协程里面会主动调用实现IEnumerator (迭代器)的MoveNext函数,咱们就去实现这个接口
然后在MoveNext函数里面去判断服务端的消息是否返回了,这样再通过yeild配合,使流程简单化。也很通俗易懂,简单明了。
最新文章
- DCDC(4.5V to 23V -3.3V)
- 触摸精灵lua脚本实现微信群加好友功能
- 使用ambari搭建Hadoop平台
- 关于CSS中的PX值(像素)
- [刷机教程] 三星Note8 N5100不卡屏的唯一解决办法--落雨刷机教程
- LCS算法
- [Node.js] node-persist: localStorage on the server
- 开心菜鸟系列----变量的解读(javascript入门篇)
- C++多态实现原理
- C++STL模板库序列容器之vector
- spring boot+mybatis+generator生成domain大小写问题
- php 对象数组互转
- 代码:jquery自定义插件 demo
- IIS 是如何处理 ASP.NET 请求的
- win32 数据类型 vs c#
- 启动haoop并运行wordcount
- java-数据库连接工具类 DataSourceUtil.java
- 使用JSTL的taglib做if判断
- Java之JVM调优案例分析与实战(1) - 高性能硬件上的程序部署策略
- 使用Sinopia搭建私有npm仓库