#include "napi/native_api.h" //#include "OCCTRenderThread/OCCTRenderThread.h" #include #include #include #include #include //#include //using namespace OCCTRenderer; // //// 存储XComponent ID到渲染线程的映射 //static std::map> renderThreadMap; //static std::mutex mapMutex; // //// XComponent回调 //static void OnSurfaceCreated(XComponent* component, void* window) //{ // OH_NativeXComponent* nativeXComponent = reinterpret_cast(component); // int64_t id = 0; // OH_NativeXComponent_GetXComponentId(nativeXComponent, &id); // { // std::lock_guard lock(mapMutex); // if (renderThreadMap.find(id) == renderThreadMap.end()) { // auto renderThread = std::make_shared(); // renderThreadMap[id] = renderThread; // // // 启动渲染线程 // renderThread->start(reinterpret_cast(window)); // } // } // // printf("Surface created for component id: %lld\n", static_cast(id)); //} // //static void OnSurfaceChanged(XComponent* component, void* window, int32_t width, int32_t height) //{ // OH_NativeXComponent* nativeXComponent = reinterpret_cast(component); // int64_t id = 0; // OH_NativeXComponent_GetXComponentId(nativeXComponent, &id); // // { // std::lock_guard lock(mapMutex); // if (renderThreadMap.find(id) != renderThreadMap.end()) { // renderThreadMap[id]->resizeWindow(width, height); // } // } // // printf("Surface changed for component id: %lld, width: %d, height: %d\n", // static_cast(id), width, height); //} // //static void OnSurfaceDestroyed(XComponent* component, void* window) //{ // OH_NativeXComponent* nativeXComponent = reinterpret_cast(component); // int64_t id = 0; // OH_NativeXComponent_GetXComponentId(nativeXComponent, &id); // // { // std::lock_guard lock(mapMutex); // if (renderThreadMap.find(id) != renderThreadMap.end()) { // renderThreadMap[id]->stop(); // renderThreadMap.erase(id); // } // } // // printf("Surface destroyed for component id: %lld\n", static_cast(id)); //} // //// 渲染完成回调 //static void OnRenderComplete() //{ // // 这里可以通知JS层渲染完成,例如发送事件 //} // //// 旋转模型 //static napi_value RotateModel(napi_env env, napi_value info) //{ // size_t argc = 3; // napi_value args[3] = {nullptr}; // napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); // // if (argc < 3) { // napi_throw_error(env, nullptr, "Wrong number of arguments"); // return nullptr; // } // // int64_t id = 0; // double xAngle = 0.0; // double yAngle = 0.0; // // napi_get_value_int64(env, args[0], &id); // napi_get_value_double(env, args[1], &xAngle); // napi_get_value_double(env, args[2], &yAngle); // // { // std::lock_guard lock(mapMutex); // if (renderThreadMap.find(id) != renderThreadMap.end()) { // renderThreadMap[id]->setRotation(static_cast(xAngle), static_cast(yAngle)); // } // } // // return nullptr; //} // //// 平移模型 //static napi_value TranslateModel(napi_env env, napi_value info) //{ // size_t argc = 3; // napi_value args[3] = {nullptr}; // napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); // // if (argc < 3) { // napi_throw_error(env, nullptr, "Wrong number of arguments"); // return nullptr; // } // // int64_t id = 0; // double x = 0.0; // double y = 0.0; // // napi_get_value_int64(env, args[0], &id); // napi_get_value_double(env, args[1], &x); // napi_get_value_double(env, args[2], &y); // // { // std::lock_guard lock(mapMutex); // if (renderThreadMap.find(id) != renderThreadMap.end()) { // renderThreadMap[id]->setTranslation(static_cast(x), static_cast(y)); // } // } // // return nullptr; //} // //// 重置视图 //static napi_value ResetView(napi_env env, napi_value info) //{ // size_t argc = 1; // napi_value args[1] = {nullptr}; // napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); // // if (argc < 1) { // napi_throw_error(env, nullptr, "Wrong number of arguments"); // return nullptr; // } // // int64_t id = 0; // napi_get_value_int64(env, args[0], &id); // // { // std::lock_guard lock(mapMutex); // if (renderThreadMap.find(id) != renderThreadMap.end()) { // renderThreadMap[id]->resetView(); // } // } // // return nullptr; //} // //// 设置背景颜色 //static napi_value SetClearColor(napi_env env, napi_value info) //{ // size_t argc = 5; // napi_value args[5] = {nullptr}; // napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); // // if (argc < 5) { // napi_throw_error(env, nullptr, "Wrong number of arguments"); // return nullptr; // } // // int64_t id = 0; // double r = 0.0, g = 0.0, b = 0.0, a = 0.0; // // napi_get_value_int64(env, args[0], &id); // napi_get_value_double(env, args[1], &r); // napi_get_value_double(env, args[2], &g); // napi_get_value_double(env, args[3], &b); // napi_get_value_double(env, args[4], &a); // // { // std::lock_guard lock(mapMutex); // if (renderThreadMap.find(id) != renderThreadMap.end()) { // renderThreadMap[id]->setClearColor(static_cast(r), static_cast(g), // static_cast(b), static_cast(a)); // } // } // // return nullptr; //} // //// 加载STEP模型 //static napi_value LoadStepModel(napi_env env, napi_value info) //{ // size_t argc = 2; // napi_value args[2] = {nullptr}; // napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); // // if (argc < 2) { // napi_throw_error(env, nullptr, "Wrong number of arguments"); // return nullptr; // } // // int64_t id = 0; // char path[1024] = {0}; // size_t pathLen = 0; // // napi_get_value_int64(env, args[0], &id); // napi_get_value_string_utf8(env, args[1], path, sizeof(path), &pathLen); // // { // std::lock_guard lock(mapMutex); // if (renderThreadMap.find(id) != renderThreadMap.end()) { // renderThreadMap[id]->loadModel(std::string(path)); // } // } // // return nullptr; //} // //// 注册模块 //static napi_value Init(napi_env env, napi_value exports) //{ // // 注册XComponent回调 // OH_NativeXComponent_Callback callback = { // .OnSurfaceCreated = OnSurfaceCreated, // .OnSurfaceChanged = OnSurfaceChanged, // .OnSurfaceDestroyed = OnSurfaceDestroyed // }; // // napi_property_descriptor desc[] = { // DECLARE_NAPI_FUNCTION("rotateModel", RotateModel), // DECLARE_NAPI_FUNCTION("translateModel", TranslateModel), // DECLARE_NAPI_FUNCTION("resetView", ResetView), // DECLARE_NAPI_FUNCTION("setClearColor", SetClearColor), // DECLARE_NAPI_FUNCTION("loadStepModel", LoadStepModel) // }; // // NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); // // return exports; //} // //EXTERN_C_START ///* // * 定义函数,用于注册NAPI模块 // */ //static napi_module OCCTModel = { // .nm_version = 1, // .nm_flags = 0, // .nm_filename = nullptr, // .nm_register_func = Init, // .nm_modname = "OCCTRender", // .nm_priv = ((void*)0), // .reserved = {0} //}; // ///* // * 模块注册函数 // */ //extern "C" void NAPI_occtrenderer_GetJSClass(void) //{ // napi_module_register(&OCCTModel); //} //EXTERN_C_END #include "curl/curl.h" // [StartExclude curl_request_cpp] #include "napi/native_api.h" #include "hilog/log.h" #include using namespace std; // [EndExclude curl_request_cpp] // Get request and post request data response functions size_t ReqReply(void *ptr, size_t size, size_t nmemb, void *userdata) { string *str = reinterpret_cast(userdata); (*str).append((char *)ptr, size * nmemb); return size * nmemb; } // http GET Request configuration CURLcode CurlGetReq(const std::string &url, std::string &response) { // Curl initialization CURL *curl = curl_easy_init(); // Curl return value CURLcode res; if (curl) { // Set the request header for Curl struct curl_slist *headers = NULL; headers = curl_slist_append(headers, "Content-Type:application/json"); curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // Set the URL address for the request curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); // Receive response header data, 0 represents not receiving, 1 represents receiving curl_easy_setopt(curl, CURLOPT_HEADER, 1); // Set data receiving function curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, ReqReply); curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)&response); // Set to not use any signal/alarm handlers curl_easy_setopt(curl, CURLOPT_NOSIGNAL, 1); // Set timeout period curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10); curl_easy_setopt(curl, CURLOPT_TIMEOUT, 10); // Open request res = curl_easy_perform(curl); } // Release curl curl_easy_cleanup(curl); return res; } static napi_value NatReq(napi_env env, napi_callback_info info) { string getUrlStr = "http://www.baidu.com"; string getResponseStr; auto res = CurlGetReq(getUrlStr, getResponseStr); if (res == CURLE_OK) { OH_LOG_Print(LOG_APP, LOG_INFO, 0xFF00, "pure", "response: \n%{public}s", getResponseStr.c_str()); } // [StartExclude curl_request_cpp] size_t requireArgc = 2; size_t argc = 2; napi_value args[2] = {nullptr}; napi_get_cb_info(env, info, &argc, args, nullptr, nullptr); napi_valuetype valuetype0; napi_typeof(env, args[0], &valuetype0); napi_valuetype valuetype1; napi_typeof(env, args[1], &valuetype1); double value0; napi_get_value_double(env, args[0], &value0); double value1; napi_get_value_double(env, args[1], &value1); napi_value sum; napi_create_double(env, value0 + value1, &sum); return sum; // [EndExclude curl_request_cpp] } // [End curl_request_cpp] EXTERN_C_START static napi_value Init(napi_env env, napi_value exports) { napi_property_descriptor desc[] = {{"add", nullptr, NatReq, nullptr, nullptr, nullptr, napi_default, nullptr}}; napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc); return exports; } EXTERN_C_END static napi_module nativecurl = { .nm_version = 1, .nm_flags = 0, .nm_filename = nullptr, .nm_register_func = Init, .nm_modname = "nativecurl", .nm_priv = ((void *)0), .reserved = {0}, }; extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&nativecurl); }