上一篇,写了个CCPomelo导出到js,一直研究怎么写回调,研究了半天也没找到哪里能够自动生成代码了,看了半天源码,只好手动添加代码,在自动生成的 中修改 函数
CCPomelo增长几个成员 ui
class CCPomelo : public cocos2d::CCObject
{
public:
CCPomelo(){};
~CCPomelo(){}; this
int connect(const char* addr, unsigned short port); 指针
int request(const char* route, const char* msg); 对象
virtual void onRequestCallback(int status, const char* msg); get
void log(const char* pszLog); 回调函数
static CCPomelo* getInstance();
JSContext *m_jsCx;
JSObject *m_jsThisObj;
jsval m_jsFun;
jsval *m_jsArgv;
protected:
void* m_client; 源码
protected:
static CCPomelo* m_pInstance;
}; string
JSBool js_cocos2dx_extension_CCPomelo_request(JSContext *cx, uint32_t argc, jsval *vp)
{
jsval *argv = JS_ARGV(cx, vp);
JSBool ok = JS_TRUE;
JSObject *obj = JS_THIS_OBJECT(cx, vp);
js_proxy_t *proxy; JS_GET_NATIVE_PROXY(proxy, obj);
CCPomelo* cobj = (CCPomelo *)(proxy ? proxy->ptr : NULL);
JSB_PRECONDITION2( cobj, cx, JS_FALSE, "Invalid Native Object");
if (argc == 3) {
const char* arg0;
const char* arg1;
jsval arg2;
std::string arg0_tmp; ok &= jsval_to_std_string(cx, argv[0], &arg0_tmp); arg0 = arg0_tmp.c_str();
std::string arg1_tmp; ok &= jsval_to_std_string(cx, argv[1], &arg1_tmp); arg1 = arg1_tmp.c_str();
//************添加的部分 io
cobj->m_jsCx = cx;//js上下文
cobj->m_jsThisObj = obj;//js对象指针
cobj->m_jsFun = argv[2];//回调函数
//************结束
JSB_PRECONDITION2(ok, cx, JS_FALSE, "Error processing arguments");
int ret = cobj->request(arg0, arg1);
jsval jsret;
jsret = int32_to_jsval(cx, ret);
JS_SET_RVAL(cx, vp, jsret);
return JS_TRUE;
}
JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 3);
return JS_FALSE;
}
在CALLBACK里面调用JS函数
void CCPomelo::onRequestCallback(int status, const char* msg)
JS代码:
cc.Pomelo.getInstance().connect("127.0.0.1", 3010);
cc.Pomelo.getInstance().request("connector.helloHandler.hi", "{'msg' : 'hi~'}".replace(/'/g,"\""), this.onCallback);
onCallback: function () { cc.Pomelo.getInstance().log("Pomelo onCallback"); },