【COCOS2DX-LUA 脚本开发之八】使用Lua实现Http交互

简介:

     利用 cocos2dx-LuaProxy 也可以来实现lua版http功能,具体请移步到:【COCOS2DX-LUA 脚本开发之九】使用cocos2dx-LuaProxy便捷Lua项目快速使用cocos2dx引擎extensions扩展包

 

Cocos2dx 为我们封装了在cocos2dx中http的网络框架,其文件在cocos2dx引擎包的/Users/Himi/Documents/cocos2d-2.1rc0-x-2.1.2-hotfix/extensions/network 文件下的 HttpClient、HttpRequest 、HttpResponse如下图:

 

QQ20130412-1@2x

 

至于如何使用,Himi这里不再详细叙述,大家可以看引擎提供的例子中自己阅读学习(TestCpp项目中)

有童鞋就会问了,既然cocos2dx都已经为我们封装好了,那还讲什么? – -。

嗯,是的,我们可以通过将这几个类通过tolua++工具binding到lua中供我们来使用,但是!一般我们访问服务器时,都希望数据返回时调用我们的一个方法进行对数据的处理,那么使用CCHttpClient 我们可以通过HttpRequest请求包的时候,对其进行设置其回调函数,如下:

  inline void setResponseCallback(CCObject* pTarget, SEL_CallFuncND pSelector)
    {
        _pTarget = pTarget;
        _pSelector = pSelector;

        if (_pTarget)
        {
            _pTarget->retain();
        }
    }

大家可以看到此函数需要一个SEL_CallFuncND的参数,而SEL_CallFuncND是个宏定义,并且cocos2dx binding到Lua的LuaCocos2d.cpp 中是没有将SEL_CallFuncND进行binding的。

当然大家如果可以将lua调用setResponseCallback的办法解决,那么则可以直接使用cocos2dx引擎包下的network即可。

另外我们可以通过一些别的办法进行解决,当然以下内容也是我们本篇所要重点介绍的! 

首先还是继续介绍下quick-cocos2d-x框架,对于quick-cocos2d-x 其实在之前简单的介绍了,它是一个基于cocos2d-x lua进行扩展的一个框架,使用quick-cocos2d-x 能让使用cocos2dx-lua项目开发者,更快捷的,更方便的开发!

需要注意的是quick-cocos2d-x的git可下载的zip是不全的,童鞋们需要通过git 来clone下来。500+MB

 (Himi与quick-cocos2d-x作者交流中,在下个版本有可能quick-cocos2d-x会嵌入cocos2dx引擎中)

虚的不多说,本篇则是Himi从quick-cocos2d-x 中提取出来的一个Http框架供Lua使用,下面简单介绍下:

   (以下对于一些qucik-cocos2d-x中的http的框架封装和如何修改的不做解释,直接介绍如何使用!)

首先下载改版后的c++代码以及Himi对应封装好的pkg文件包 LuaHTTP.zip :

LuaHTTP  下载地址:http://vdisk.weibo.com/s/xg9U0  解压后将HNetWork文件夹并将其加入你们的项目, 解压后如下图:

QQ20130412-4@2x

然后将CCHTTPRequest.pkg 通过cocos2dx 引擎的tolua++ 工具binding到你项目的LuaCocos2d.cpp中(别忘记将这个pkg添加到Cocos2d.pkg中),并且在LuaCocos2d.h中添加:

 

 
 
  1.      
  2. #include "CCHTTPRequest.h" 
 

然后,让Xcode,Build 下!OK 编译成功!

然后我们在lua中书写测试代码:

 

 
 
  1.    --  GET 
  2. local url = "www.baidu.com" 
  3. local request =CCHTTPRequest:createWithUrlLua
  4.   
  5. function(event) 
  6.     local request = event.request 
  7.     print("state:"..request:getState().."  code:"..request:getResponseStatusCode()) 
  8.     local parseStr =  request:getResponseString() 
  9.     print(parseStr) 
  10.   
  11. end,  
  12. url, 
  13. kCCHTTPRequestMethodGET) 
  14. request:start() 
 

可能大家直接看上面不太清晰,OK,先看对应调用的CCHTTPRequest.h中的createWithUrlLua函数:

 

 
 
  1. static CCHTTPRequest* createWithUrlLua(LUA_FUNCTION listener, 
  2.                                            const char* url, 
  3.                                            int method = kCCHTTPRequestMethodGET); 
 

 

函数第一个参数: lua函数 (用于接受到server数据后的回调用户处理数据)

函数第二个参数: 获取数据的url地址

函数第三个参数: http交互方式  GET or POST ,如下定义:

#define kCCHTTPRequestMethodGET  0

#define kCCHTTPRequestMethodPOST 1

看完以上的理解,那么反回头看lua的那几行测试代码,我想你也该很清楚了!

运行截图:

QQ20130412-5@2x

 

控制台输出的打印:

QQ20130412-6@2x

 

ok, 本篇就到这里!有任何问题,请及时留言讨论。









本文转自 xiaominghimi 51CTO博客,原文链接:http://blog.51cto.com/xiaominghimi/1176685,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
编解码 测试技术 索引
性能工具之 Jmeter 使用 HTTP 请求编写 HLS 脚本
在我们简要介绍了 HLS 协议的基础知识,接下来我们详细介绍一种使用 Jmeter 编写压测 HLS 协议脚本的方法。
72 1
性能工具之 Jmeter 使用 HTTP 请求编写 HLS 脚本
|
1月前
|
缓存 NoSQL Java
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
【Redis】5、Redis 的分布式锁、Lua 脚本保证 Redis 命令的原子性
60 0
|
2月前
|
算法 NoSQL Java
springboot整合redis及lua脚本实现接口限流
springboot整合redis及lua脚本实现接口限流
72 0
|
19天前
|
NoSQL Java Redis
lua脚本做redis的锁
这段内容是关于使用Redis实现分布式锁的Java代码示例。`RedisLock`类包含`lock`和`unlock`方法,使用`StringRedisTemplate`和Lua脚本进行操作。代码展示了两种加锁方式:一种带有过期时间,另一种不带。还提到了在加锁和解锁过程中的异常处理,并提供了相关参考资料链接。
17 3
|
21天前
|
存储 NoSQL 数据处理
Redis Lua脚本:赋予Redis更强大的逻辑与功能
Redis Lua脚本:赋予Redis更强大的逻辑与功能
|
22天前
|
JSON C语言 数据格式
C语言与lua通过json对象交互
C语言与lua通过json对象交互
17 1
|
1月前
|
监控
通过Lua脚本实现禁止员工上班玩游戏的软件的自动化任务管理
使用Lua脚本,企业可以自动化管理员工行为,防止上班时间玩游戏。Lua是一种轻量级脚本语言,适合编写监控任务。示例脚本展示了如何检测工作时间内员工是否玩游戏,并在发现时执行相应操作,如关闭游戏或发送警告。此外,另一脚本演示了如何将监控数据通过HTTP POST自动提交到网站,以实现有效的行为管理。这种解决方案灵活且可定制,有助于提升工作效率。
115 1
|
1月前
|
NoSQL Java 数据库
优惠券秒杀案例 - CAS、Redis+Lua脚本解决高并发并行
优惠券秒杀案例 - CAS、Redis+Lua脚本解决高并发并行
|
1月前
|
Java API Maven
|
2月前
|
NoSQL Java 数据处理
Redis和Spring Boot的绝佳组合:Lua脚本的黑科技
Redis和Spring Boot的绝佳组合:Lua脚本的黑科技
55 0