码迷,mamicode.com
首页 > 编程语言 > 详细

Unity中使用协程进行服务端数据验证手段

时间:2017-01-16 22:46:13      阅读:371      评论:0      收藏:0      [点我收藏+]

标签:logger   yield   对象   消息   使用   难度   就会   print   返回   

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

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

另提示:迭代器loop判断服务端回调的方式,不建议大规模使用,unity中,如果协程使用不当,每发起一次都会有一定的gc垃圾,活学活用,就好了

Unity中使用协程进行服务端数据验证手段

标签:logger   yield   对象   消息   使用   难度   就会   print   返回   

原文地址:http://www.cnblogs.com/huangguadazhanxihongshi/p/6291099.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!