JSClass *js_cocos2dx_clientTcpSocket_class;
JSObject *js_cocos2dx_clientTcpSocket_prototype;
using namespace JSB;
bool js_JSB_ClientTcpSocket_connect(JSContext *cx, uint32_t argc, jsval *vp)
{
jsval *argv = JS_ARGV(cx, vp);
JSObject obj = JS_THIS_OBJECT(cx, vp);
CClientTcpSocket cobj = (CClientTcpSocket *)JS_GetPrivate(obj);
if (argc == 2)
{
if (JSVAL_IS_STRING(argv) && JSVAL_IS_INT(argv))
{
std::string data;
jsval_to_std_string(cx, argv, &data);
int port = JSVAL_TO_INT(argv);
cobj->connect( data.c_str(), port );
JS_SET_RVAL(cx, vp, JSVAL_VOID);
return true;
}
}
JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 0);
return false;
}
bool js_JSB_ClientTcpSocket_send(JSContext *cx, uint32_t argc, jsval *vp)
{
jsval *argv = JS_ARGV(cx, vp);
JSObject obj = JS_THIS_OBJECT(cx, vp);
CClientTcpSocket cobj = (CClientTcpSocket *)JS_GetPrivate(obj);
if(argc == 1){
do
{
if (argv.isObject())
{
uint8_t *bufdata = NULL;
uint32_t len = 0;
JSObject* jsobj = JSVAL_TO_OBJECT(argv);
if (JS_IsArrayBufferObject(jsobj))
{
bufdata = JS_GetArrayBufferData(jsobj);
len = JS_GetArrayBufferByteLength(jsobj);
}
else if (JS_IsArrayBufferViewObject(jsobj))
{
bufdata = (uint8_t*)JS_GetArrayBufferViewData(jsobj);
len = JS_GetArrayBufferViewByteLength(jsobj);
}
if (bufdata && len > 0)
{
cobj->send(bufdata, len);
break;
}
}
JS_ReportError(cx, "data type to be sent is unsupported.");
} while (0);
JS_SET_RVAL(cx, vp, JSVAL_VOID);
return true;
}
JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 0);
return true;
}
bool js_JSB_ClientTcpSocket_close(JSContext *cx, uint32_t argc, jsval *vp)
{
JSObject obj = JS_THIS_OBJECT(cx, vp);
CClientTcpSocket cobj = (CClientTcpSocket *)JS_GetPrivate(obj);
if(argc == 0)
{
cobj->close();
JS_SET_RVAL(cx, vp, JSVAL_VOID);
return true;
}
JS_ReportError(cx, "wrong number of arguments: %d, was expecting %d", argc, 0);
return false;
}
static void js_JSB_ClientTcpSocket_finalize(JSFreeOp *fop, JSObject *obj)
{
CCLOGINFO(“jsbindings: finalizing JS object %p (ClientTcpSocket)”, obj);
CClientTcpSocket *newObject = (CClientTcpSocket *)JS_GetPrivate(obj);
JS_SetPrivate(obj, NULL);
delete newObject;
}
bool js_JSB_ClientTcpSocket_constructor(JSContext *cx, uint32_t argc, jsval *vp)
{
JSObject *jsobj = JS_NewObject(cx, js_cocos2dx_clientTcpSocket_class, js_cocos2dx_clientTcpSocket_prototype, NULL);
CClientTcpSocket *newObject = new CClientTcpSocket();
newObject->init();
newObject->setJSDelegate( jsobj );
JS_SetPrivate(jsobj, (void *)newObject);
JS_SET_RVAL(cx, vp, OBJECT_TO_JSVAL(jsobj));
return true;
}
static void js_JSB_ClientTcpSocket_createClass(JSContext *cx, JSObject *global) {
js_cocos2dx_clientTcpSocket_class = (JSClass *)calloc(1, sizeof(JSClass));
js_cocos2dx_clientTcpSocket_class->name = "ClientTcpSocket";
js_cocos2dx_clientTcpSocket_class->addProperty = JS_PropertyStub;
js_cocos2dx_clientTcpSocket_class->delProperty = JS_DeletePropertyStub;
js_cocos2dx_clientTcpSocket_class->getProperty = JS_PropertyStub;
js_cocos2dx_clientTcpSocket_class->setProperty = JS_StrictPropertyStub;
js_cocos2dx_clientTcpSocket_class->enumerate = JS_EnumerateStub;
js_cocos2dx_clientTcpSocket_class->resolve = JS_ResolveStub;
js_cocos2dx_clientTcpSocket_class->convert = JS_ConvertStub;
js_cocos2dx_clientTcpSocket_class->finalize = js_JSB_ClientTcpSocket_finalize;
js_cocos2dx_clientTcpSocket_class->flags = JSCLASS_HAS_RESERVED_SLOTS(2);
static JSPropertySpec properties] = {
{0, 0, 0, JSOP_NULLWRAPPER, JSOP_NULLWRAPPER}
};
static JSFunctionSpec funcs] = {
JS_FN("connect", js_JSB_ClientTcpSocket_connect, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE),
JS_FN("send", js_JSB_ClientTcpSocket_send, 1, JSPROP_PERMANENT | JSPROP_ENUMERATE),
JS_FN("close", js_JSB_ClientTcpSocket_close, 0, JSPROP_PERMANENT | JSPROP_ENUMERATE),
JS_FS_END
};
static JSFunctionSpec st_funcs] = {
JS_FS_END
};
js_cocos2dx_clientTcpSocket_prototype = JS_InitClass(
cx, global,
NULL,
js_cocos2dx_clientTcpSocket_class,
js_JSB_ClientTcpSocket_constructor, 0, // constructor
properties,
funcs,
NULL, // no static properties
st_funcs);
}
void register_jsb_clientTcpSocket( JSContext* cx, JSObject* obj )
{
JS::RootedValue nsval(cx);
JS::RootedObject ns(cx);
JS_GetProperty(cx, obj, “JSB”, &nsval);
if (nsval == JSVAL_VOID) {
ns = JS_NewObject(cx, NULL, NULL, NULL);
nsval = OBJECT_TO_JSVAL(ns);
JS_SetProperty(cx, obj, “JSB”, nsval);
} else {
JS_ValueToObject(cx, nsval, &ns);
}
obj = ns;
js_JSB_ClientTcpSocket_createClass(cx,obj);
}
这是绑定的代码。
急求解,。。。。。