近期在做项目中的个人中心的一些事情,用户头像上传,下载,本地缓存,二级缓存,压缩,这些都要做,麻雀虽小五脏俱全啊,也是写的浑浑噩噩的,

当我们在上传用户头像的时候,向服务端发送上传头像请求之前,一般都会做一次验证,向服务端获取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配合,使流程简单化。也很通俗易懂,简单明了。

Unity中使用协程进行服务端数据验证手段的更多相关文章

  1. Unity中的协程(一)

    这篇文章很不错的问题,推荐阅读英文原版: Introduction to Coroutines Scripting with Coroutines   这篇文章转自:http://blog.csdn. ...

  2. xlua 实现协程替换Unity中的协程

    C#中的协程: IEnumerator ShowSpiritInfo() { UIMessageMgr.ShowMsgWait(true); DestroyUIModelInfo(); bool is ...

  3. python GIL全局解释器锁,多线程多进程效率比较,进程池,协程,TCP服务端实现协程

    GIL全局解释器锁 ''' python解释器: - Cpython C语言 - Jpython java ... 1.GIL: 全局解释器锁 - 翻译: 在同一个进程下开启的多线程,同一时刻只能有一 ...

  4. Unity中的协程是什么?

    什么是协程? 1.协程是一个分部执行,遇到条件(yield return 语句)会挂起,直到条件满足才会被唤醒继续执行后面的代码. 2.Unity在每一帧(Frame)都会去处理对象上的协程.Unit ...

  5. struts2(三)---struts2中的服务端数据验证框架validate

    struts2为我们提供了一个很好的数据验证框架–validate,该框架可以很方便的实现服务端的数据验证. ActionSupport类提供了一个validate()方法,当我们需要在某一个acti ...

  6. unity 中的协程

    //The coroutine will continue after all Update functionshave been calledon the next frame. ; //Conti ...

  7. 前端技术之:如何在Vue中使用clipboard.js复制服务端数据

    第一步 创建点击对象页面元素,并绑定业务数据. <el-button type="text" size="mini" class="copy-b ...

  8. Unity C#笔记 协程

    什么是协程 协同程序,在主程序运行的同时,开启另外一段逻辑处理,来协同当前程序的执行. 可能看了这段文字介绍还是有点模糊,其实可以用多线程来比较. 多线程 多线程,顾名思义,多条同时执行的线程. 最初 ...

  9. Python中异步协程的使用方法介绍

    1. 前言 在执行一些 IO 密集型任务的时候,程序常常会因为等待 IO 而阻塞.比如在网络爬虫中,如果我们使用 requests 库来进行请求的话,如果网站响应速度过慢,程序一直在等待网站响应,最后 ...

随机推荐

  1. JS获取字符串实际长度

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: function strLength(str) { var realLength = 0 ...

  2. Mysql个人语句笔记

    --一些简单语句记录: /*mysql*/SHOW DATABASES CREATE DATABASE guoDROP DATABASE guo /*查看创建的数据库*/SHOW CREATE DAT ...

  3. 缓存,spring

    applicationcontext.xml xmlns:cache="http://www.springframework.org/schema/cache" xsi:schem ...

  4. NUint使用详解及Visual Studio配置

    NUint使用详解及Visual Studio配置 阅读目录 什么是单元测试? 为什么使用单元测试? NUint使用详解: 示例 属性 断言 简单测试 VS配置: External Tools Vis ...

  5. WisDom .net开发框架设计 2

    随笔- 10  文章- 0  评论- 57  WisDom .net开发框架设计 (二)   WisDom .net 权限设计  1.前言        几乎在所有的管理的系统,都离不开用户,角色,权 ...

  6. 《剑指Offer》面试题-重建二叉树

    题目描述: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7 ...

  7. 【译】Objectively Speaking 2: A Crash Course in Objective-C for iOS 6

    In this Objective-C tutorial, you will create a simple movie quotes quiz app. Along the way, you’ll ...

  8. 自然语言处理(NLP)常用开源工具总结(转)

    ..................................内容纯转发+收藏................................... 学习自然语言这一段时间以来接触和听说了好多开 ...

  9. Code First 启用迁移时出错 "No context type was found in the assembly"

    问题:Code First 启用迁移时找不到上下文DbContext所在的项目. PM> Enable-Migrations No context type was found in the a ...

  10. VS2012 Unit Test

    VS2012 Unit Test 个人学习汇总(含目录) 首先,给出MSDN相关地址:http://msdn.microsoft.com/en-us/library/Microsoft.VisualS ...