Skip to content

Commit d042c04

Browse files
committed
Convert OpenBaton to AsyncWorker
Signed-off-by: Gareth Hancock <gazhank@gmail.com>
1 parent 16dbc23 commit d042c04

File tree

4 files changed

+22
-35
lines changed

4 files changed

+22
-35
lines changed

packages/bindings/src/serialport.cpp

Lines changed: 2 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ Napi::Value Open(const Napi::CallbackInfo& info) {
5454
return env.Null();
5555
}
5656

57-
OpenBaton* baton = new OpenBaton();
57+
OpenBaton* baton = new OpenBaton(info[2].As<Napi::Function>());
5858
snprintf(baton->path, sizeof(baton->path), "%s", path.c_str());
5959
baton->baudRate = getIntFromObject(options, "baudRate");
6060
baton->dataBits = getIntFromObject(options, "dataBits");
@@ -66,41 +66,16 @@ Napi::Value Open(const Napi::CallbackInfo& info) {
6666
baton->xany = getBoolFromObject(options, "xany");
6767
baton->hupcl = getBoolFromObject(options, "hupcl");
6868
baton->lock = getBoolFromObject(options, "lock");
69-
baton->callback.Reset(info[2].As<Napi::Function>());
7069

7170
#ifndef WIN32
7271
baton->vmin = getIntFromObject(options, "vmin");
7372
baton->vtime = getIntFromObject(options, "vtime");
7473
#endif
7574

76-
napi_value resource_name;
77-
napi_create_string_utf8(env, "Open", NAPI_AUTO_LENGTH, &resource_name);
78-
napi_create_async_work(env, NULL, resource_name, EIO_Open, EIO_AfterOpen, baton, &baton->work);
79-
napi_queue_async_work(env, baton->work);
75+
baton->Queue();
8076
return env.Undefined();
8177
}
8278

83-
void EIO_AfterOpen(napi_env n_env, napi_status status, void* req) {
84-
Napi::Env env = Napi::Env::Env(n_env);
85-
Napi::HandleScope scope(env);
86-
87-
OpenBaton* data = (OpenBaton*)req;
88-
89-
std::vector<napi_value> args;
90-
args.reserve(2);
91-
if (data->errorString[0]) {
92-
args.push_back(Napi::String::New(env, data->errorString));
93-
args.push_back(env.Undefined());
94-
} else {
95-
args.push_back(env.Null());
96-
args.push_back(Napi::Number::New(env, data->result));
97-
}
98-
99-
data->callback.Call(args);
100-
napi_delete_async_work(env, data->work);
101-
free(data);
102-
}
103-
10479
Napi::Value Update(const Napi::CallbackInfo& info) {
10580
Napi::Env env = info.Env();
10681
// file descriptor

packages/bindings/src/serialport.h

Lines changed: 18 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,7 @@
1616
#define ERROR_STRING_SIZE 1024
1717

1818
Napi::Value Open(const Napi::CallbackInfo& info);
19-
void EIO_Open(napi_env env, void* req);
20-
void EIO_AfterOpen(napi_env n_env, napi_status status, void* req);
19+
void EIO_Open(void* req);
2120

2221
Napi::Value Update(const Napi::CallbackInfo& info);
2322
void EIO_Update(napi_env env, void* req);
@@ -64,12 +63,10 @@ enum SerialPortStopBits {
6463
SerialPortParity ToParityEnum(const Napi::String& str);
6564
SerialPortStopBits ToStopBitEnum(double stopBits);
6665

67-
struct OpenBaton {//: public Napi::AsyncResource {
68-
OpenBaton() : // AsyncResource("node-serialport:OpenBaton"),
66+
struct OpenBaton : public Napi::AsyncWorker {
67+
OpenBaton(Napi::Function& callback) : Napi::AsyncWorker(callback, "node-serialport:OpenBaton"),
6968
errorString(), path() {}
7069
char errorString[ERROR_STRING_SIZE];
71-
Napi::FunctionReference callback;
72-
napi_async_work work;
7370
char path[1024];
7471
int fd = 0;
7572
int result = 0;
@@ -88,6 +85,21 @@ struct OpenBaton {//: public Napi::AsyncResource {
8885
uint8_t vmin = 0;
8986
uint8_t vtime = 0;
9087
#endif
88+
void Execute() override {
89+
EIO_Open(this);
90+
}
91+
92+
void OnError(Napi::Error const &error) override {
93+
auto env = Env();
94+
Napi::HandleScope scope(env);
95+
Callback().Call({Napi::String::New(env, errorString), env.Undefined()});
96+
}
97+
98+
void OnOK() override {
99+
auto env = Env();
100+
Napi::HandleScope scope(env);
101+
Callback().Call({env.Null(), Napi::Number::New(env, result)});
102+
}
91103
};
92104

93105
struct ConnectionOptions {

packages/bindings/src/serialport_unix.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ int ToDataBitsConstant(int dataBits) {
7676
return -1;
7777
}
7878

79-
void EIO_Open(napi_env env, void* req) {
79+
void EIO_Open(void* req) {
8080
OpenBaton* data = (OpenBaton*)req;
8181

8282
int flags = (O_RDWR | O_NOCTTY | O_NONBLOCK | O_CLOEXEC | O_SYNC);

packages/bindings/src/serialport_win.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ void AsyncCloseCallback(uv_handle_t* handle) {
5656
delete async;
5757
}
5858

59-
void EIO_Open(napi_env env, void* req) {
59+
void EIO_Open(void* req) {
6060
OpenBaton* data = (OpenBaton*)req;
6161

6262
char originalPath[1024];

0 commit comments

Comments
 (0)