pmed / v8pp

Bind C++ functions and classes into V8 JavaScript engine
http://pmed.github.io/v8pp/
Other
898 stars 120 forks source link

How to use callback function in js #63

Closed wang70937 closed 6 years ago

wang70937 commented 6 years ago

How to execute callback function in js (function download_callback)?

` class CDownloadFile { public: ...

int start(const char* szUrl, const char* szPath)
{
    CURL *curl;
    CURLcode res;

    ...

    //set callback function here
    res = curl_easy_setopt(curl, CURLOPT_PROGRESSFUNCTION, ProgressCallback);

    ...
    return 0;
}

static int ProgressCallback(void *clientp, double dltotal, double dlnow, double ultotal, double ulnow)
{
    std::cout << "dltotal: " << (long)dltotal << " ---- dlnow:" << (long)dlnow << "---- " << nPos <<"%" << std::endl;

            //
           v8::Isolate* isolate = dd->m_isolate;
           v8::Handle<v8::Function> fun = v8::Function::New(isolate, v8_arg_count);//
           v8::Handle<v8::Value> vRet = v8pp::call_v8(isolate, fun, fun, nPos);
    return 0;
}

...

};`

//////////////////////////////////////// `... v8pp::class_ CDownloadFile_class(isolate); CDownloadFile_class .ctor() .set("start", &CDownloadFile::start) .set("callback", &CDownloadFile::setCallback) ;

... `

////////////////////////////////////////

`var curl = require('curl');

function download_callback(p) { console.log("download_callback execute..."); }

//download file var download = curl.download(); download.callback(download_callback); download.start("http://xxxx", "xxxxx.xxx");`

pmed commented 6 years ago

You can use v8::Function as an argument for C++ function callback, see #49

wang70937 commented 6 years ago

thanks @pmed