cocos2dx-lua_XMLHttpRequestTest分析

以下是win7、cocos2dx-3.10 lua开发1.概述需求一个能上传音频文件到指定服务器,且能从指定服务器下载音频文件的功能。在cocos2dx的测试用例中发现了XMLHttpRequestTest。经过分析,发现cocos2dx中的XMLHttpRequest完全是仿照AJAX的XMLHttpRequest写的。cocos2dx中的XMLHttpRequest
摘要由CSDN通过智能技术生成
以下是win7、cocos2dx-3.10 lua开发


1.概述
需求一个能上传音频文件到指定服务器,且能从指定服务器下载音频文件的功能。
在cocos2dx的测试用例中发现了XMLHttpRequestTest。
经过分析,发现cocos2dx中的XMLHttpRequest完全是仿照AJAX的XMLHttpRequest写的。
cocos2dx中的XMLHttpRequest其底层实现还是HttpRequest,只不过在lua中被重新封装了。
目前,cocos2dx的XMLHttpRequestTest的演示还很粗糙,其没有关于发送数据的具体操作演示。


cocos2dx的XMLHttpRequest的基本思路:
(1)少量的不敏感的数据通过get来传递,但url的长度有限是225个字符,所以如果数据多的话就用post来传递。
(2)post是把form中的数据放入html流的头(head)中传递。


2.分析
2.1.cocos2dx中与XMLHttpRequest有关的lua脚本
(1)
NetworkConstants.lua------------
cc.XMLHTTPREQUEST_RESPONSE_STRING       = 0   //字符串
cc.XMLHTTPREQUEST_RESPONSE_ARRAY_BUFFER = 1   //二进制
cc.XMLHTTPREQUEST_RESPONSE_BLOB         = 2
cc.XMLHTTPREQUEST_RESPONSE_DOCUMENT     = 3
cc.XMLHTTPREQUEST_RESPONSE_JSON         = 4   //json格式


(2)
DeprecatedCocos2dClass.lua--------------


--XMLHttpRequest class will be Deprecated,begin
function DeprecatedClass.XMLHttpRequest()
    deprecatedTip("XMLHttpRequest","cc.XMLHttpRequest")
    return cc.XMLHttpRequest
end
_G["XMLHttpRequest"] = DeprecatedClass.XMLHttpRequest()
--XMLHttpRequest class will be Deprecated,end


2.2.查找对应的cpp
lua_xml_http_request.h-------------
enum class ResponseType{
STRING,
ARRAY_BUFFER,
BLOB,
DOCUMENT,
JSON
};


static const unsigned short UNSENT = 0;            //初始化状态。XMLHttpRequest 对象已创建或已被 abort() 方法重置。
static const unsigned short OPENED = 1;            //open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。
static const unsigned short HEADERS_RECEIVED = 2;  //send方法已经调用,尚未开始接受数据;
static const unsigned short LOADING = 3;           //正在接受数据。Http响应头信息已经接收,但尚未接收完成;
static const unsigned short DONE = 4;              //响应数据接收完成。


lua_xml_http_request.cpp-------------
...
TOLUA_API int register_xml_http_request(lua_State* L)
{
    tolua_open(L);
    lua_reg_xml_http_request(L);
    tolua_module(L,"cc",0);
    tolua_beginmodule(L,"cc");
      tolua_cclass(L,"XMLHttpRequest","cc.XMLHttpRequest","cc.Ref",lua_collect_xml_http_request);
      tolua_beginmodule(L,"XMLHttpRequest");
        tolua_variable(L, "responseType", lua_get_XMLHttpRequest_responseType, lua_set_XMLHttpRequest_responseType);
        tolua_variable(L, "withCredentials", lua_get_XMLHttpRequest_withCredentials, lua_set_XMLHttpRequest_withCredentials);
        tolua_variable(L, "timeout", lua_get_XMLHttpRequest_timeout, lua_set_XMLHttpRequest_timeout);
        tolua_variable(L, "readyState", lua_get_XMLHttpRequest_readyState, nullptr);
        tolua_variable(L, "status",lua_get_XMLHttpRequest_status,nullptr);
        tolua_variable(L, "statusText", lua_get_XMLHttpRequest_statusText, nullptr);
        tolua_variable(L, "responseText", lua_get_XMLHttpRequest_responseText, nullptr);
        tolua_variable(L, "response", lua_get_XMLHttpRequest_response, nullptr);
        tolua_function(L, "new", lua_cocos2dx_XMLHttpRequest_constructor);
        tolua_function(L, "open", lua_cocos2dx_XMLHttpRequest_open);
        tolua_function(L, "send", lua_cocos2dx_XMLHttpRequest_send);
        tolua_function(L, "abort", lua_cocos2dx_XMLHttpRequest_abort);
        tolua_function(L, "setRequestHeader", lua_cocos2dx_XMLHttpRequest_setRequestHeader);
        tolua_function(L, "getAllResponseHeaders", lua_cocos2dx_XMLHttpRequest_getAllResponseHeaders);
        tolua_function(L, "getResponseHeader", lua_cocos2dx_XMLHttpRequest_getResponseHeader);
        tolua_function(L, "registerScriptHandler", lua_cocos2dx_XMLHttpRequest_registerScriptHandler);
        tolua_function(L, "unregisterScriptHandler", lua_cocos2dx_XMLHttpRequest_unregisterScriptHandler);
      tolua_endmodule(L);
    tolua_endmodule(L);
    return 1;
}


new()                     //新建一个XMLHttpRequest对象
responseType              //服务器反馈的内容的类型,对应lua_xml_http_request.h中的枚举ResponseType,同时也对应上面2中的(1)
open(methode, url, async) //向url指向的服务器发送一个类型为methode的请求,async为true表示异步发送(默认)
                          //methode的类型:POST、PUT
registerScriptHandler(callFunction) //添加监听,当服务器反馈到客户端时会调用函数callFunction
unregisterScriptHandler() //解除监听,一般在callFunction中调用,以实现一个请求、只回应一次
readyState                //准备状态,请查看lua_xml_http_request.h
status                    /
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值