Skip to content

Commit b896057

Browse files
danbevaddaleax
authored andcommitted
src: unifying PipeConnectWrap and TCPConnectWrap
This commit attempts to address one of the items in #4641 which is related to src/pipe_wrap.cc and src/tcp_wrap.cc. Currently both pipe_wrap.cc and tcp_wrap.cc contain a class that are almost identical. This commit extracts these parts into a separate class that both can share. PR-URL: #7501 Reviewed-By: Ben Noordhuis <info@bnoordhuis.nl> Reviewed-By: Anna Henningsen <anna@addaleax.net>
1 parent c948877 commit b896057

File tree

5 files changed

+68
-51
lines changed

5 files changed

+68
-51
lines changed

node.gyp

+2
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@
142142
'src/fs_event_wrap.cc',
143143
'src/cares_wrap.cc',
144144
'src/connection_wrap.cc',
145+
'src/connect_wrap.cc',
145146
'src/handle_wrap.cc',
146147
'src/js_stream.cc',
147148
'src/node.cc',
@@ -179,6 +180,7 @@
179180
'src/base-object.h',
180181
'src/base-object-inl.h',
181182
'src/connection_wrap.h',
183+
'src/connect_wrap.h',
182184
'src/debug-agent.h',
183185
'src/env.h',
184186
'src/env-inl.h',

src/connect_wrap.cc

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#include "connect_wrap.h"
2+
3+
#include "env.h"
4+
#include "env-inl.h"
5+
#include "req-wrap.h"
6+
#include "req-wrap-inl.h"
7+
#include "util.h"
8+
#include "util-inl.h"
9+
10+
namespace node {
11+
12+
using v8::Local;
13+
using v8::Object;
14+
15+
16+
ConnectWrap::ConnectWrap(Environment* env,
17+
Local<Object> req_wrap_obj,
18+
AsyncWrap::ProviderType provider) : ReqWrap(env, req_wrap_obj, provider) {
19+
Wrap(req_wrap_obj, this);
20+
}
21+
22+
} // namespace node

src/connect_wrap.h

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
#ifndef SRC_CONNECT_WRAP_H_
2+
#define SRC_CONNECT_WRAP_H_
3+
4+
#if defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
5+
6+
#include "env.h"
7+
#include "req-wrap.h"
8+
#include "async-wrap.h"
9+
#include "v8.h"
10+
11+
namespace node {
12+
13+
class ConnectWrap : public ReqWrap<uv_connect_t> {
14+
public:
15+
ConnectWrap(Environment* env,
16+
v8::Local<v8::Object> req_wrap_obj,
17+
AsyncWrap::ProviderType provider);
18+
19+
size_t self_size() const override { return sizeof(*this); }
20+
};
21+
22+
} // namespace node
23+
24+
#endif // defined(NODE_WANT_INTERNALS) && NODE_WANT_INTERNALS
25+
26+
#endif // SRC_CONNECT_WRAP_H_

src/pipe_wrap.cc

+8-26
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,7 @@
88
#include "node.h"
99
#include "node_buffer.h"
1010
#include "node_wrap.h"
11-
#include "req-wrap.h"
12-
#include "req-wrap-inl.h"
11+
#include "connect_wrap.h"
1312
#include "stream_wrap.h"
1413
#include "util-inl.h"
1514
#include "util.h"
@@ -31,26 +30,6 @@ using v8::String;
3130
using v8::Value;
3231

3332

34-
// TODO(bnoordhuis) share with TCPWrap?
35-
class PipeConnectWrap : public ReqWrap<uv_connect_t> {
36-
public:
37-
PipeConnectWrap(Environment* env, Local<Object> req_wrap_obj);
38-
39-
size_t self_size() const override { return sizeof(*this); }
40-
};
41-
42-
43-
PipeConnectWrap::PipeConnectWrap(Environment* env, Local<Object> req_wrap_obj)
44-
: ReqWrap(env, req_wrap_obj, AsyncWrap::PROVIDER_PIPECONNECTWRAP) {
45-
Wrap(req_wrap_obj, this);
46-
}
47-
48-
49-
static void NewPipeConnectWrap(const FunctionCallbackInfo<Value>& args) {
50-
CHECK(args.IsConstructCall());
51-
}
52-
53-
5433
Local<Object> PipeWrap::Instantiate(Environment* env, AsyncWrap* parent) {
5534
EscapableHandleScope handle_scope(env->isolate());
5635
CHECK_EQ(false, env->pipe_constructor_template().IsEmpty());
@@ -92,8 +71,10 @@ void PipeWrap::Initialize(Local<Object> target,
9271
env->set_pipe_constructor_template(t);
9372

9473
// Create FunctionTemplate for PipeConnectWrap.
95-
Local<FunctionTemplate> cwt =
96-
FunctionTemplate::New(env->isolate(), NewPipeConnectWrap);
74+
auto constructor = [](const FunctionCallbackInfo<Value>& args) {
75+
CHECK(args.IsConstructCall());
76+
};
77+
auto cwt = FunctionTemplate::New(env->isolate(), constructor);
9778
cwt->InstanceTemplate()->SetInternalFieldCount(1);
9879
cwt->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "PipeConnectWrap"));
9980
target->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "PipeConnectWrap"),
@@ -163,7 +144,7 @@ void PipeWrap::Listen(const FunctionCallbackInfo<Value>& args) {
163144

164145
// TODO(bnoordhuis) Maybe share this with TCPWrap?
165146
void PipeWrap::AfterConnect(uv_connect_t* req, int status) {
166-
PipeConnectWrap* req_wrap = static_cast<PipeConnectWrap*>(req->data);
147+
ConnectWrap* req_wrap = static_cast<ConnectWrap*>(req->data);
167148
PipeWrap* wrap = static_cast<PipeWrap*>(req->handle->data);
168149
CHECK_EQ(req_wrap->env(), wrap->env());
169150
Environment* env = wrap->env();
@@ -226,7 +207,8 @@ void PipeWrap::Connect(const FunctionCallbackInfo<Value>& args) {
226207
Local<Object> req_wrap_obj = args[0].As<Object>();
227208
node::Utf8Value name(env->isolate(), args[1]);
228209

229-
PipeConnectWrap* req_wrap = new PipeConnectWrap(env, req_wrap_obj);
210+
ConnectWrap* req_wrap =
211+
new ConnectWrap(env, req_wrap_obj, AsyncWrap::PROVIDER_PIPECONNECTWRAP);
230212
uv_pipe_connect(&req_wrap->req_,
231213
&wrap->handle_,
232214
*name,

src/tcp_wrap.cc

+10-25
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,7 @@
66
#include "handle_wrap.h"
77
#include "node_buffer.h"
88
#include "node_wrap.h"
9-
#include "req-wrap.h"
10-
#include "req-wrap-inl.h"
9+
#include "connect_wrap.h"
1110
#include "stream_wrap.h"
1211
#include "util.h"
1312
#include "util-inl.h"
@@ -32,24 +31,6 @@ using v8::String;
3231
using v8::Value;
3332

3433

35-
class TCPConnectWrap : public ReqWrap<uv_connect_t> {
36-
public:
37-
TCPConnectWrap(Environment* env, Local<Object> req_wrap_obj);
38-
size_t self_size() const override { return sizeof(*this); }
39-
};
40-
41-
42-
TCPConnectWrap::TCPConnectWrap(Environment* env, Local<Object> req_wrap_obj)
43-
: ReqWrap(env, req_wrap_obj, AsyncWrap::PROVIDER_TCPCONNECTWRAP) {
44-
Wrap(req_wrap_obj, this);
45-
}
46-
47-
48-
static void NewTCPConnectWrap(const FunctionCallbackInfo<Value>& args) {
49-
CHECK(args.IsConstructCall());
50-
}
51-
52-
5334
Local<Object> TCPWrap::Instantiate(Environment* env, AsyncWrap* parent) {
5435
EscapableHandleScope handle_scope(env->isolate());
5536
CHECK_EQ(env->tcp_constructor_template().IsEmpty(), false);
@@ -112,8 +93,10 @@ void TCPWrap::Initialize(Local<Object> target,
11293
env->set_tcp_constructor_template(t);
11394

11495
// Create FunctionTemplate for TCPConnectWrap.
115-
Local<FunctionTemplate> cwt =
116-
FunctionTemplate::New(env->isolate(), NewTCPConnectWrap);
96+
auto constructor = [](const FunctionCallbackInfo<Value>& args) {
97+
CHECK(args.IsConstructCall());
98+
};
99+
auto cwt = FunctionTemplate::New(env->isolate(), constructor);
117100
cwt->InstanceTemplate()->SetInternalFieldCount(1);
118101
cwt->SetClassName(FIXED_ONE_BYTE_STRING(env->isolate(), "TCPConnectWrap"));
119102
target->Set(FIXED_ONE_BYTE_STRING(env->isolate(), "TCPConnectWrap"),
@@ -253,7 +236,7 @@ void TCPWrap::Listen(const FunctionCallbackInfo<Value>& args) {
253236

254237

255238
void TCPWrap::AfterConnect(uv_connect_t* req, int status) {
256-
TCPConnectWrap* req_wrap = static_cast<TCPConnectWrap*>(req->data);
239+
ConnectWrap* req_wrap = static_cast<ConnectWrap*>(req->data);
257240
TCPWrap* wrap = static_cast<TCPWrap*>(req->handle->data);
258241
CHECK_EQ(req_wrap->env(), wrap->env());
259242
Environment* env = wrap->env();
@@ -300,7 +283,8 @@ void TCPWrap::Connect(const FunctionCallbackInfo<Value>& args) {
300283
int err = uv_ip4_addr(*ip_address, port, &addr);
301284

302285
if (err == 0) {
303-
TCPConnectWrap* req_wrap = new TCPConnectWrap(env, req_wrap_obj);
286+
ConnectWrap* req_wrap =
287+
new ConnectWrap(env, req_wrap_obj, AsyncWrap::PROVIDER_TCPCONNECTWRAP);
304288
err = uv_tcp_connect(&req_wrap->req_,
305289
&wrap->handle_,
306290
reinterpret_cast<const sockaddr*>(&addr),
@@ -334,7 +318,8 @@ void TCPWrap::Connect6(const FunctionCallbackInfo<Value>& args) {
334318
int err = uv_ip6_addr(*ip_address, port, &addr);
335319

336320
if (err == 0) {
337-
TCPConnectWrap* req_wrap = new TCPConnectWrap(env, req_wrap_obj);
321+
ConnectWrap* req_wrap =
322+
new ConnectWrap(env, req_wrap_obj, AsyncWrap::PROVIDER_TCPCONNECTWRAP);
338323
err = uv_tcp_connect(&req_wrap->req_,
339324
&wrap->handle_,
340325
reinterpret_cast<const sockaddr*>(&addr),

0 commit comments

Comments
 (0)