Skip to content

Commit f69f1ef

Browse files
authored
Merge pull request #1 from Kyun-J/Convert-cpp-style
convert to cpp style
2 parents f2457dd + a0e1b6f commit f69f1ef

File tree

5 files changed

+56
-84
lines changed

5 files changed

+56
-84
lines changed

.vscode/c_cpp_properties.json

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,9 @@
33
{
44
"name": "Win32",
55
"includePath": [
6+
"${workspaceFolder}/node_modules/node-addon-api/**",
67
"${workspaceFolder}/VMAware/src/**",
7-
"${workspaceFolder}/src/**",
8-
"${env:USERPROFILE}/AppData/Local/node-gyp/Cache/**/include/node"
8+
"${workspaceFolder}/src/**"
99
],
1010
"defines": [
1111
"_DEBUG",
@@ -37,7 +37,6 @@
3737
"browse": {
3838
"path": [
3939
"${workspaceFolder}/node_modules/node-addon-api/**",
40-
"~/.nvm/versions/node/**/include/node",
4140
"${workspaceFolder}/VMAware/src/**",
4241
"${workspaceFolder}/src/**"
4342
],

.vscode/settings.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
},
1111
"typescript.tsdk": "node_modules/typescript/lib",
1212
"files.associations": {
13-
"initializer_list": "cpp"
13+
"initializer_list": "cpp",
14+
"functional": "cpp"
1415
}
1516
}

binding.gyp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
"dependencies": [
4343
"<!(node -p \"require('node-addon-api').gyp\")"
4444
],
45+
"defines": [ 'NAPI_CPP_EXCEPTIONS' ],
4546
"xcode_settings": {
4647
"OTHER_CFLAGS": ["-std=c++20", "-fexceptions"],
4748
"OTHER_CPLUSPLUSFLAGS": [ "-std=c++20", "-fexceptions"]

src/main.cpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
#include <napi.h>
22

3-
void InitGetVMInfo(napi_env env, napi_value exports);
3+
void InitGetVMInfo(Napi::Env env, Napi::Object exports);
44

5-
napi_value Init(napi_env env, napi_value exports) {
5+
Napi::Object Init(Napi::Env env, Napi::Object exports) {
66
InitGetVMInfo(env, exports);
77
return exports;
88
}
99

10-
NAPI_MODULE(NODE_GYP_MODULE_NAME, Init)
10+
NODE_API_MODULE(NODE_GYP_MODULE_NAME, Init)

src/vmDetect.cpp

Lines changed: 48 additions & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,65 @@
11
#include <napi.h>
22
#include "vmaware.hpp"
33

4-
struct VMDetectWorkerData {
5-
napi_async_work work;
6-
napi_deferred deferred;
4+
class VMDetectWorker : public Napi::AsyncWorker {
5+
private:
76
VM::vmaware vm;
87
std::string errorMessage;
9-
};
10-
11-
void VMDetectExecuteWorker(napi_env env, void* data) {
12-
VMDetectWorkerData* workerData = (VMDetectWorkerData*)data;
13-
try {
14-
workerData->vm = VM::vmaware();
15-
} catch (const std::exception& e) {
16-
workerData->errorMessage = e.what();
17-
} catch (...) {
18-
workerData->errorMessage = "Unknown error occurred.";
19-
}
20-
}
21-
22-
void VMDetectCompleteWorker(napi_env env, napi_status status, void* data) {
23-
VMDetectWorkerData* workerData = (VMDetectWorkerData*)data;
24-
25-
if (status != napi_ok) {
26-
napi_value error;
27-
napi_create_string_utf8(env, "Error occurred during asynchronous operation", NAPI_AUTO_LENGTH, &error);
28-
napi_reject_deferred(env, workerData->deferred, error);
29-
} else if (!workerData->errorMessage.empty()) {
30-
napi_value error;
31-
napi_create_string_utf8(env, workerData->errorMessage.c_str(), NAPI_AUTO_LENGTH, &error);
32-
napi_reject_deferred(env, workerData->deferred, error);
33-
} else {
34-
napi_value result;
35-
napi_create_object(env, &result);
36-
37-
napi_value isVM;
38-
napi_get_boolean(env, workerData->vm.is_vm, &isVM);
39-
napi_set_named_property(env, result, "isVM", isVM);
40-
41-
napi_value brand;
42-
napi_create_string_utf8(env, workerData->vm.brand.c_str(), NAPI_AUTO_LENGTH, &brand);
43-
napi_set_named_property(env, result, "brand", brand);
44-
45-
napi_value type;
46-
napi_create_string_utf8(env, workerData->vm.type.c_str(), NAPI_AUTO_LENGTH, &type);
47-
napi_set_named_property(env, result, "type", type);
8+
Napi::Promise::Deferred deferred;
489

49-
napi_value conclusion;
50-
napi_create_string_utf8(env, workerData->vm.conclusion.c_str(), NAPI_AUTO_LENGTH, &conclusion);
51-
napi_set_named_property(env, result, "conclusion", conclusion);
10+
public:
11+
VMDetectWorker(Napi::Env env) : Napi::AsyncWorker(env), deferred(Napi::Promise::Deferred::New(env)) {}
5212

53-
napi_value percentage;
54-
napi_create_int32(env, workerData->vm.percentage, &percentage);
55-
napi_set_named_property(env, result, "percentage", percentage);
56-
57-
napi_value detected_count;
58-
napi_create_int32(env, workerData->vm.detected_count, &detected_count);
59-
napi_set_named_property(env, result, "detectedCount", detected_count);
60-
61-
napi_value technique_count;
62-
napi_create_int32(env, workerData->vm.technique_count, &technique_count);
63-
napi_set_named_property(env, result, "techniqueCount", technique_count);
64-
65-
napi_resolve_deferred(env, workerData->deferred, result);
13+
Napi::Promise GetPromise() {
14+
return deferred.Promise();
6615
}
6716

68-
napi_delete_async_work(env, workerData->work);
69-
delete workerData;
70-
}
17+
void Execute() override {
18+
try {
19+
vm = VM::vmaware();
20+
} catch (const std::exception& e) {
21+
errorMessage = e.what();
22+
} catch (...) {
23+
errorMessage = "Unknown error occurred.";
24+
}
25+
}
7126

72-
napi_value GetVMInfo(napi_env env, napi_callback_info info) {
73-
napi_value promise;
74-
napi_deferred deferred;
75-
napi_create_promise(env, &deferred, &promise);
27+
void OnOK() override {
28+
Napi::Env env = Env();
29+
Napi::HandleScope scope(env);
30+
31+
if (!errorMessage.empty()) {
32+
Napi::Error error = Napi::Error::New(env, errorMessage);
33+
deferred.Reject(error.Value());
34+
} else {
35+
Napi::Object result = Napi::Object::New(env);
36+
37+
result.Set("isVM", Napi::Boolean::New(env, vm.is_vm));
38+
result.Set("brand", Napi::String::New(env, vm.brand));
39+
result.Set("type", Napi::String::New(env, vm.type));
40+
result.Set("conclusion", Napi::String::New(env, vm.conclusion));
41+
result.Set("percentage", Napi::Number::New(env, vm.percentage));
42+
result.Set("detectedCount", Napi::Number::New(env, vm.detected_count));
43+
result.Set("techniqueCount", Napi::Number::New(env, vm.technique_count));
44+
45+
deferred.Resolve(result);
46+
}
47+
}
7648

77-
VMDetectWorkerData* workerData = new VMDetectWorkerData();
78-
workerData->deferred = deferred;
49+
void OnError(const Napi::Error& e) override {
50+
deferred.Reject(e.Value());
51+
}
52+
};
7953

80-
napi_value resourceName;
81-
napi_create_string_utf8(env, "GetVMInfo", NAPI_AUTO_LENGTH, &resourceName);
54+
Napi::Value GetVMInfo(const Napi::CallbackInfo& info) {
55+
Napi::Env env = info.Env();
8256

83-
napi_create_async_work(env, NULL, resourceName, VMDetectExecuteWorker, VMDetectCompleteWorker, workerData, &workerData->work);
84-
napi_queue_async_work(env, workerData->work);
57+
VMDetectWorker* worker = new VMDetectWorker(env);
58+
worker->Queue();
8559

86-
return promise;
60+
return worker->GetPromise();
8761
}
8862

89-
void InitGetVMInfo(napi_env env, napi_value exports) {
90-
napi_property_descriptor desc[] = {
91-
{ "getVMInfo", 0, GetVMInfo, 0, 0, 0, napi_default, 0 }
92-
};
93-
napi_define_properties(env, exports, 1, desc);
63+
void InitGetVMInfo(Napi::Env env, Napi::Object exports) {
64+
exports.Set("getVMInfo", Napi::Function::New(env, GetVMInfo));
9465
}

0 commit comments

Comments
 (0)