以下是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 /
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 /