大佬教程收集整理的这篇文章主要介绍了cocos2d-x学习篇之网络(http)篇,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
转自:http://blog.csdn.net/duotianshi86/article/details/10216383
这段时间接触到cocos2d-x,拜读了csdn上很多大大的文章,尤其是小满的专栏,感觉获益不少,觉得像他们那样,边学习,边总结经验,并写出来学习过程与大家分享,我觉得是一件很值得学习的事,所以也打算把自己学习的东西和经验与大家分享,有不足之处或者错误的,还希望请大家能海涵并提出来,共同讨论,共同进步。好了,废话到此。
Cocos2dx 为我们封装了在cocos2dx中http的网络框架,其文件在cocos2dx引擎包的cocos2d-2.1rc0-x-2.1.2\extensions\network文件下的 httpClient、httprequest 、httpResponse。但是真正的底层,用的还是cURL库。。。
进行一次http交互,需要涉及的有三个类,httprequest用来描述一个请求。httpResponse用来描述对应请求的响应。httpClient是一个单例模式的类,它的职责就是负责将收到的httprequest对象push到发送队列中,并发送一个信号量驱动工作线程工作,工作线程再将收到的数据封装成一个httpResponse对象push接收队列,并启用调度来派送数据。具体的后面有说道。
1.首先创建一个类,继承自cocos2d-x中的任何一个类都可以(有共同父类CCObject),并实现一个SEL_CallFuncND类型成员函数,用来做收到数据后的回调函数,函数原型为void fun(CCNode*,void*)。
2.当我们需要一次http交互的时候,我们需要new 一个CChttprequest对象,并设置url和请求方式(get还是post,本文只说一下get的原理,post区别不大,可以自己看),并将上面说函数设置为收到数据后的回调函数。
3.使用CChttpClient::geTinstance()单例对象,将前一步骤的CChttprequest对象作为参数,调用send()方法。
4.在回调函数中,将第二个参数转换成CChttpResponse *类型,就可以通过CChttpResponse类的方法来获取返回状态和数据等能容了。
我们先来看看具体的该怎么用,以自带的httpClientTest.cpp为例。httpClientTest.cpp:
基本上一个http交互就是这个样子了,下面我们深入的看一下CChttpClient是怎么工作的,先来看一张图,画的不好或者不足之处,请勿拍砖
其实就是当我们第一次CChttpClient::geTinstance()时,CChttpClient会将自己的成员函数dispathResponseCallBACks()挂载至CCscheduler(可以理解成一个调度者,它会定时调用所有挂载至上面的函数),并将它初始设置为停止调度。在当我们第一次调用send()发送数据时,CChttpClient会创建一个工作线程(之后再调用send()就不会创建线程了),然后再将传递过来的CChttprequest对象push到发送队列s_requestQueue,并发送一个信号给工作线程,驱使其工作。工作线程首先从发送队列中取得一个CChttprequest对象,并new 一个CChttpResponse对象,将参数设置给cURL,cURL会在获取到数据的填充response,工作线程将填充后的response再放到接收队列s_responseQueue中去,同时,启用调度。下一次CCscheduler就会CChttpClient::dispatchResponseCallBACks()了,在该函数中,它会调用我们在第二步中设置给request的回调函数,并将response传递过去。基本过程就是这样。下面来详解相关的源文件。httprequest.h,其实这个文件没什么好说的,都有注释
@H_616_398@copy
copy @H_568_1717@
httpClient.cpp
@H_616_398@copy 花了大半天时间,终于写的差不多了,其实我当初是想看看cocos2d-x是怎样封装socket这一块的,结果是这样,用的cURL库。。。
这篇文章是我的处女做,哪里有不好的地方大家提出来共同进步,欢迎交流
本人今年刚毕业,接触cocos2d-x也才两个月(写的不好不要扔砖就好),前一个多月一直在搞粒子系统这块,这几天把改造后的粒子系统工具开发完了,时间稍微多点,就看看其他的模块了,看完了收获也不少,由于经常逛csdn,拜读大神的文章,所以就想着咱也来发表一遍学习心得吧,这样既可以提高自己,也可以和大家交流交流心得,更重要的是我发现写博客可以提升学习的兴趣
以上是大佬教程为你收集整理的cocos2d-x学习篇之网络(http)篇全部内容,希望文章能够帮你解决cocos2d-x学习篇之网络(http)篇所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。