Skip to content

Commit d6c8fbf

Browse files
authored
Merge pull request #205 from FelipeGdM/feature/node_12
Add support to node 12.x and Gazebo 11
2 parents 712c740 + 8a6a7d6 commit d6c8fbf

File tree

6 files changed

+114
-138
lines changed

6 files changed

+114
-138
lines changed

.github/workflows/ci.yaml

+5-3
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,22 @@ on: [push, pull_request]
55
jobs:
66
build:
77

8-
runs-on: ubuntu-16.04
8+
runs-on: ubuntu-20.04
99

1010
strategy:
1111
matrix:
12-
node-version: [8.x, 10.x]
12+
node-version: [10.x, 12.x, 14.x]
1313

1414
steps:
1515
- uses: actions/checkout@v2
1616
- name: Use Node.js ${{ matrix.node-version }}
1717
uses: actions/setup-node@v1
1818
with:
1919
node-version: ${{ matrix.node-version }}
20+
- run: sudo sh -c 'echo "deb http://packages.osrfoundation.org/gazebo/ubuntu-stable `lsb_release -cs` main" > /etc/apt/sources.list.d/gazebo-stable.list'
21+
- run: wget https://packages.osrfoundation.org/gazebo.key -O - | sudo apt-key add -
2022
- run: sudo apt update
21-
- run: sudo apt install -y libjansson-dev libboost-dev imagemagick libtinyxml-dev git cmake build-essential wget libgazebo7-dev
23+
- run: sudo apt install -y libjansson-dev libboost-dev imagemagick libtinyxml-dev git cmake build-essential wget libgazebo11-dev
2224
- run: sudo npm install -g grunt
2325
# - run: sudo bash -c 'echo "deb http://dl.google.com/linux/chrome/deb/ stable main" > /etc/apt/sources.list.d/chrome.list'
2426
# - run: sudo wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | sudo apt-key add -

gzbridge/GZNode.cc

+84-99
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
*
1616
*/
1717

18-
#include <node.h>
18+
#include <nan.h>
1919
#include "GZNode.hh"
2020

2121
#include "GazeboInterface.hh"
@@ -47,120 +47,118 @@ GZNode::~GZNode()
4747
};
4848

4949
/////////////////////////////////////////////////
50-
void GZNode::Init(Handle<Object> exports)
50+
NAN_MODULE_INIT(GZNode::Init)
5151
{
52-
Isolate* isolate = exports->GetIsolate();
5352
// Prepare constructor template
54-
Local<FunctionTemplate> tpl = FunctionTemplate::New(isolate, New);
55-
tpl->SetClassName(String::NewFromUtf8(isolate, "GZNode"));
53+
Local<String> class_name = Nan::New("GZNode").ToLocalChecked();
54+
55+
Local<FunctionTemplate> tpl = Nan::New<v8::FunctionTemplate>(GZNode::New);
56+
57+
tpl->SetClassName(class_name);
5658
tpl->InstanceTemplate()->SetInternalFieldCount(1);
5759
// Prototype
58-
NODE_SET_PROTOTYPE_METHOD(tpl, "loadMaterialScripts", LoadMaterialScripts);
60+
Nan::SetPrototypeMethod(tpl, "loadMaterialScripts", LoadMaterialScripts);
5961

60-
NODE_SET_PROTOTYPE_METHOD(tpl, "setConnected", SetConnected);
62+
Nan::SetPrototypeMethod(tpl, "setConnected", SetConnected);
6163

62-
NODE_SET_PROTOTYPE_METHOD(tpl, "setPoseMsgFilterMinimumDistanceSquared", SetPoseMsgFilterMinimumDistanceSquared);
63-
NODE_SET_PROTOTYPE_METHOD(tpl, "getPoseMsgFilterMinimumDistanceSquared", GetPoseMsgFilterMinimumDistanceSquared);
64-
NODE_SET_PROTOTYPE_METHOD(tpl, "setPoseMsgFilterMinimumQuaternionSquared", SetPoseMsgFilterMinimumQuaternionSquared);
65-
NODE_SET_PROTOTYPE_METHOD(tpl, "getPoseMsgFilterMinimumQuaternionSquared", GetPoseMsgFilterMinimumQuaternionSquared);
64+
Nan::SetPrototypeMethod(tpl, "setPoseMsgFilterMinimumDistanceSquared", SetPoseMsgFilterMinimumDistanceSquared);
65+
Nan::SetPrototypeMethod(tpl, "getPoseMsgFilterMinimumDistanceSquared", GetPoseMsgFilterMinimumDistanceSquared);
66+
Nan::SetPrototypeMethod(tpl, "setPoseMsgFilterMinimumQuaternionSquared", SetPoseMsgFilterMinimumQuaternionSquared);
67+
Nan::SetPrototypeMethod(tpl, "getPoseMsgFilterMinimumQuaternionSquared", GetPoseMsgFilterMinimumQuaternionSquared);
6668

67-
NODE_SET_PROTOTYPE_METHOD(tpl, "getPoseMsgFilterMinimumAge",
69+
Nan::SetPrototypeMethod(tpl, "getPoseMsgFilterMinimumAge",
6870
GetPoseMsgFilterMinimumAge);
6971

70-
NODE_SET_PROTOTYPE_METHOD(tpl, "setPoseMsgFilterMinimumAge",
72+
Nan::SetPrototypeMethod(tpl, "setPoseMsgFilterMinimumAge",
7173
SetPoseMsgFilterMinimumAge);
7274

73-
NODE_SET_PROTOTYPE_METHOD(tpl, "getMessages", GetMessages);
75+
Nan::SetPrototypeMethod(tpl, "getMessages", GetMessages);
7476

75-
NODE_SET_PROTOTYPE_METHOD(tpl, "request", Request);
77+
Nan::SetPrototypeMethod(tpl, "request", Request);
7678

77-
NODE_SET_PROTOTYPE_METHOD(tpl, "getIsGzServerConnected",
79+
Nan::SetPrototypeMethod(tpl, "getIsGzServerConnected",
7880
GetIsGzServerConnected);
7981

80-
NODE_SET_PROTOTYPE_METHOD(tpl, "getMaterialScriptsMessage",
82+
Nan::SetPrototypeMethod(tpl, "getMaterialScriptsMessage",
8183
GetMaterialScriptsMessage);
8284

83-
exports->Set(String::NewFromUtf8(isolate, "GZNode"),
84-
tpl->GetFunction());
85+
target->Set(Nan::GetCurrentContext(), class_name,
86+
tpl->GetFunction(Nan::GetCurrentContext()).ToLocalChecked()
87+
).ToChecked();
8588
}
8689

8790
/////////////////////////////////////////////////
88-
void GZNode::New(const FunctionCallbackInfo<Value>& args)
91+
NAN_METHOD(GZNode::New)
8992
{
90-
if (args.IsConstructCall()) {
93+
if (info.IsConstructCall()) {
9194
// Invoked as constructor: `new MyObject(...)`
9295
GZNode* obj = new GZNode();
93-
obj->Wrap(args.This());
94-
args.GetReturnValue().Set(args.This());
96+
obj->Wrap(info.This());
97+
info.GetReturnValue().Set(info.This());
98+
}else{
99+
return Nan::ThrowTypeError("GZNode::New - called without new keyword");
95100
}
96101
}
97102

98103
/////////////////////////////////////////////////
99-
void GZNode::LoadMaterialScripts(const FunctionCallbackInfo<Value>& args)
104+
NAN_METHOD(GZNode::LoadMaterialScripts)
100105
{
101-
Isolate* isolate = args.GetIsolate();
106+
Isolate* isolate = info.GetIsolate();
102107

103-
if (args.Length() < 1)
108+
if (info.Length() < 1)
104109
{
105-
isolate->ThrowException(Exception::TypeError(
106-
String::NewFromUtf8(isolate, "Wrong number of arguments")));
107-
return;
110+
return Nan::ThrowTypeError("GZNode::LoadMaterialScripts - Wrong number of arguments. One arg expected");
108111
}
109112

110-
if (!args[0]->IsString())
113+
if (!info[0]->IsString())
111114
{
112-
isolate->ThrowException(Exception::TypeError(
113-
String::NewFromUtf8(isolate, "Wrong argument type. String expected.")));
114-
return;
115+
return Nan::ThrowTypeError("GZNode::LoadMaterialScripts - Wrong argument type. String expected.");
115116
}
116117

117-
GZNode* obj = ObjectWrap::Unwrap<GZNode>(args.This());
118+
GZNode* obj = ObjectWrap::Unwrap<GZNode>(info.This());
118119

119-
String::Utf8Value path(args[0]->ToString());
120+
String::Utf8Value path(isolate, info[0]);
120121
obj->gzIface->LoadMaterialScripts(std::string(*path));
121122

122123
return;
123124
}
124125

125126
/////////////////////////////////////////////////
126-
void GZNode::SetConnected(const FunctionCallbackInfo<Value>& args)
127+
NAN_METHOD(GZNode::SetConnected)
127128
{
128-
GZNode *obj = ObjectWrap::Unwrap<GZNode>(args.This());
129-
bool value = args[0]->BooleanValue();
129+
130+
GZNode *obj = ObjectWrap::Unwrap<GZNode>(info.This());
131+
bool value = Nan::To<bool>(info[0]).ToChecked();
130132
obj->gzIface->SetConnected(value);
131133

132134
return;
133135
}
134136

135137
/////////////////////////////////////////////////
136-
void GZNode::GetIsGzServerConnected(const FunctionCallbackInfo<Value>& args)
138+
NAN_METHOD(GZNode::GetIsGzServerConnected)
137139
{
138-
GZNode *obj = ObjectWrap::Unwrap<GZNode>(args.This());
140+
GZNode *obj = ObjectWrap::Unwrap<GZNode>(info.This());
139141
bool value = obj->isGzServerConnected;
140142

141-
args.GetReturnValue().Set(value);
143+
info.GetReturnValue().Set(value);
142144
}
143145

144146
/////////////////////////////////////////////////
145-
void GZNode::GetMaterialScriptsMessage(const FunctionCallbackInfo<Value>& args)
147+
NAN_METHOD(GZNode::GetMaterialScriptsMessage)
146148
{
147-
Isolate* isolate = args.GetIsolate();
149+
Isolate* isolate = info.GetIsolate();
148150

149-
if (args.Length() < 1)
151+
if (info.Length() < 1)
150152
{
151-
isolate->ThrowException(Exception::TypeError(
152-
String::NewFromUtf8(isolate, "Wrong number of arguments")));
153-
return;
153+
return Nan::ThrowTypeError("GZNode::GetMaterialScriptsMessage - Wrong number of arguments. One arg expected.");
154154
}
155155

156-
if (!args[0]->IsString())
156+
if (!info[0]->IsString())
157157
{
158-
isolate->ThrowException(Exception::TypeError(
159-
String::NewFromUtf8(isolate, "Wrong argument type. String expected.")));
160-
return;
158+
return Nan::ThrowTypeError("GZNode::GetMaterialScriptsMessage - Wrong argument type. String expected.");
161159
}
162160

163-
String::Utf8Value path(args[0]->ToString());
161+
String::Utf8Value path(isolate, info[0]);
164162

165163
OgreMaterialParser materialParser;
166164
materialParser.Load(std::string(*path));
@@ -171,122 +169,109 @@ void GZNode::GetMaterialScriptsMessage(const FunctionCallbackInfo<Value>& args)
171169
msg += materialJson;
172170
msg += "}";
173171

174-
args.GetReturnValue().Set(String::NewFromUtf8(isolate ,msg.c_str()));
172+
info.GetReturnValue().Set(Nan::New(msg.c_str()).ToLocalChecked());
175173
}
176174

177175
/////////////////////////////////////////////////
178-
void GZNode::SetPoseMsgFilterMinimumDistanceSquared(const
179-
FunctionCallbackInfo<Value>& args)
176+
NAN_METHOD(GZNode::SetPoseMsgFilterMinimumDistanceSquared)
180177
{
181-
GZNode *obj = ObjectWrap::Unwrap<GZNode>(args.This());
178+
GZNode *obj = ObjectWrap::Unwrap<GZNode>(info.This());
182179

183-
Local<Number> v = Local<Number>::Cast(args[0]);
180+
Local<Number> v = Nan::To<Number>(info[0]).ToLocalChecked();
184181
double value = v->Value();
185182
obj->gzIface->SetPoseFilterMinimumDistanceSquared(value);
186183

187184
return;
188185
}
189186

190187
/////////////////////////////////////////////////
191-
void GZNode::GetPoseMsgFilterMinimumDistanceSquared(const
192-
FunctionCallbackInfo<Value>& args)
188+
NAN_METHOD(GZNode::GetPoseMsgFilterMinimumDistanceSquared)
193189
{
194-
Isolate* isolate = args.GetIsolate();
195-
GZNode *obj = ObjectWrap::Unwrap<GZNode>(args.This());
190+
GZNode *obj = ObjectWrap::Unwrap<GZNode>(info.This());
196191
double value = obj->gzIface->GetPoseFilterMinimumDistanceSquared();
197-
args.GetReturnValue().Set(Number::New(isolate ,value));
192+
info.GetReturnValue().Set(Nan::New<Number>(value));
198193
}
199194

200195
/////////////////////////////////////////////////////
201-
void GZNode::SetPoseMsgFilterMinimumQuaternionSquared(const
202-
FunctionCallbackInfo<Value>& args)
196+
NAN_METHOD(GZNode::SetPoseMsgFilterMinimumQuaternionSquared)
203197
{
204-
GZNode *obj = ObjectWrap::Unwrap<GZNode>(args.This());
205-
Local<Number> v = Local<Number>::Cast(args[0]);
198+
GZNode *obj = ObjectWrap::Unwrap<GZNode>(info.This());
199+
Local<Number> v = Nan::To<Number>(info[0]).ToLocalChecked();
206200
double value = v->Value();
207201
obj->gzIface->SetPoseFilterMinimumQuaternionSquared(value);
208202

209203
return;
210204
}
211205

212206
/////////////////////////////////////////////////
213-
void GZNode::GetPoseMsgFilterMinimumQuaternionSquared(const
214-
FunctionCallbackInfo<Value>& args)
207+
NAN_METHOD(GZNode::GetPoseMsgFilterMinimumQuaternionSquared)
215208
{
216-
Isolate* isolate = args.GetIsolate();
217-
GZNode *obj = ObjectWrap::Unwrap<GZNode>(args.This());
209+
GZNode *obj = ObjectWrap::Unwrap<GZNode>(info.This());
218210
double value = obj->gzIface->GetPoseFilterMinimumQuaternionSquared();
219-
args.GetReturnValue().Set(Number::New(isolate ,value));
211+
info.GetReturnValue().Set(Nan::New<Number>(value));
220212
}
221213

222214
/////////////////////////////////////////////////
223-
void GZNode::GetMessages(const FunctionCallbackInfo<Value>& args)
215+
NAN_METHOD(GZNode::GetMessages)
224216
{
225-
Isolate* isolate = args.GetIsolate();
226217

227-
GZNode* obj = ObjectWrap::Unwrap<GZNode>(args.This());
218+
GZNode* obj = ObjectWrap::Unwrap<GZNode>(info.This());
228219

229220
std::vector<std::string> msgs = obj->gzIface->PopOutgoingMessages();
230-
// args.GetReturnValue().Set(Number::New(isolate ,msgs.size()));
231-
Local<Array> arguments = Array::New(isolate, msgs.size());
221+
Local<Array> arguments = Nan::New<Array>(msgs.size());
232222
for (unsigned int i = 0; i < msgs.size(); ++i) {
233-
arguments->Set(i ,String::NewFromUtf8(isolate, msgs[i].c_str()));
223+
Local<String> v8_msg = Nan::New<String>(msgs[i].c_str()).ToLocalChecked();
224+
Nan::Set(arguments, i, v8_msg);
234225
}
235226

236-
args.GetReturnValue().Set(arguments);
227+
info.GetReturnValue().Set(arguments);
237228
}
238229

239230

240231
////////////////////////////////////////////////
241-
void GZNode::Request(const FunctionCallbackInfo<Value>& args)
232+
NAN_METHOD(GZNode::Request)
242233
{
243-
Isolate* isolate = args.GetIsolate();
234+
Isolate* isolate = info.GetIsolate();
244235

245-
if (args.Length() < 1)
236+
if (info.Length() < 1)
246237
{
247-
isolate->ThrowException(Exception::TypeError(
248-
String::NewFromUtf8(isolate, "Wrong number of arguments")));
249-
return;
238+
return Nan::ThrowTypeError("GZNode::Request - Wrong number of arguments. One arg expected.");
250239
}
251240

252-
if (!args[0]->IsString())
241+
if (!info[0]->IsString())
253242
{
254-
isolate->ThrowException(Exception::TypeError(
255-
String::NewFromUtf8(isolate, "Wrong argument type. String expected.")));
256-
return;
243+
return Nan::ThrowTypeError("GZNode::Request - Wrong argument type. String expected.");
257244
}
258245

259-
GZNode* obj = ObjectWrap::Unwrap<GZNode>(args.This());
246+
GZNode* obj = ObjectWrap::Unwrap<GZNode>(info.This());
260247

261-
String::Utf8Value request(args[0]->ToString());
248+
String::Utf8Value request(isolate, info[0]);
262249
obj->gzIface->PushRequest(std::string(*request));
263250

264251
return;
265252
}
266253

267254
/////////////////////////////////////////////////
268-
void GZNode::SetPoseMsgFilterMinimumAge(const
269-
FunctionCallbackInfo<Value>& args)
255+
NAN_METHOD(GZNode::SetPoseMsgFilterMinimumAge)
270256
{
271-
GZNode* obj = ObjectWrap::Unwrap<GZNode>(args.This());
272-
Local<Number> v = Local<Number>::Cast(args[0]);
257+
GZNode* obj = ObjectWrap::Unwrap<GZNode>(info.This());
258+
Local<Number> v = Nan::To<Number>(info[0]).ToLocalChecked();
273259
double value = v->Value();
274260
obj->gzIface->SetPoseFilterMinimumMsgAge(value);
275261

276262
return;
277263
}
278264

279265
/////////////////////////////////////////////////
280-
void GZNode::GetPoseMsgFilterMinimumAge(const
281-
FunctionCallbackInfo<Value>& args)
266+
NAN_METHOD(GZNode::GetPoseMsgFilterMinimumAge)
282267
{
283-
GZNode* obj = ObjectWrap::Unwrap<GZNode>(args.This());
268+
GZNode* obj = ObjectWrap::Unwrap<GZNode>(info.This());
284269
double value = obj->gzIface->GetPoseFilterMinimumMsgAge();
285-
args.GetReturnValue().Set(value);
270+
info.GetReturnValue().Set(value);
286271
}
287272

288273
/////////////////////////////////////////////////
289-
void InitAll(Handle<Object> exports)
274+
void InitAll(Local<Object> exports, Local<Value> module, void* priv)
290275
{
291276
GZNode::Init(exports);
292277
}

0 commit comments

Comments
 (0)