Skip to content

Commit 045e0db

Browse files
authored
Merge branch 'master' into static-entry-points
2 parents fe5fadb + e55a265 commit 045e0db

File tree

8 files changed

+102
-61
lines changed

8 files changed

+102
-61
lines changed

examples/service.js

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,16 +19,16 @@ iface1.addMethod('MakeError', { out: DBus.Define(String) }, function(callback) {
1919
});
2020

2121
iface1.addMethod('Hello', { out: DBus.Define(String) }, function(callback) {
22-
callback('Hello There!');
22+
callback(null, 'Hello There!');
2323
});
2424

2525
iface1.addMethod('SendObject', { in: [ DBus.Define(Object) ], out: DBus.Define(Object) }, function(obj, callback) {
26-
callback(obj);
26+
callback(null, obj);
2727
});
2828

2929
iface1.addMethod('SendVarient', { in: [ DBus.Define('Auto') ], out: DBus.Define('Auto') }, function(obj, callback) {
3030
console.log(obj);
31-
callback(obj);
31+
callback(null, obj);
3232
});
3333

3434
iface1.addMethod('Ping', { out: DBus.Define(String) }, function(callback) {
@@ -44,14 +44,14 @@ iface1.addMethod('Equal', {
4444
}, function(a, b, callback) {
4545

4646
if (a == b)
47-
callback(true);
47+
callback(null, true);
4848
else
49-
callback(false);
49+
callback(null, false);
5050

5151
});
5252

5353
iface1.addMethod('GetNameList', { out: DBus.Define(Array, 'list') }, function(callback) {
54-
callback([
54+
callback(null, [
5555
'Fred',
5656
'Stacy',
5757
'Charles',
@@ -62,7 +62,7 @@ iface1.addMethod('GetNameList', { out: DBus.Define(Array, 'list') }, function(ca
6262
});
6363

6464
iface1.addMethod('GetContacts', { out: DBus.Define(Object, 'contacts') }, function(callback) {
65-
callback({
65+
callback(null, {
6666
Fred: {
6767
6868
url: 'http://fred-zone.blogspot.com/',
@@ -108,7 +108,7 @@ var author = 'Fred Chien';
108108
iface1.addProperty('Author', {
109109
type: DBus.Define(String),
110110
getter: function(callback) {
111-
callback(author);
111+
callback(null, author);
112112
},
113113
setter: function(value, complete) {
114114
author = value;
@@ -122,7 +122,7 @@ var url = 'http://stem.mandice.org';
122122
iface1.addProperty('URL', {
123123
type: DBus.Define(String),
124124
getter: function(callback) {
125-
callback(url);
125+
callback(null, url);
126126
}
127127
});
128128

@@ -131,7 +131,7 @@ var jsOS = 'Stem OS';
131131
iface1.addProperty('JavaScriptOS', {
132132
type: DBus.Define(String),
133133
getter: function(callback) {
134-
callback(jsOS);
134+
callback(null, jsOS);
135135
}
136136
});
137137

@@ -155,7 +155,7 @@ setInterval(function() {
155155
var iface2 = obj.createInterface('nodejs.dbus.ExampleService.Interface2');
156156

157157
iface2.addMethod('Hello', { out: DBus.Define(String) }, function(callback) {
158-
callback('Hello There!');
158+
callback(null, 'Hello There!');
159159
});
160160

161161
iface2.update();

lib/service_interface.js

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -90,13 +90,19 @@ ServiceInterface.prototype.call = function(method, message, args) {
9090
}
9191

9292
// Preparing callback
93-
args = Array.prototype.slice.call(args).concat([ function(value) {
93+
args = Array.prototype.slice.call(args).concat([ function(err, value) {
9494
var type;
9595

9696
// Error handling
97-
if (value instanceof Error) {
98-
var name = value.dbusName || 'org.freedesktop.DBus.Error.Failed';
99-
self.object.service.bus._sendErrorMessageReply(message, name, value.message);
97+
if (err) {
98+
var errorName = 'org.freedesktop.DBus.Error.Failed';
99+
var errorMessage = err.toString();
100+
if (err instanceof Error) {
101+
errorMessage = err.message;
102+
errorName = err.dbusName || 'org.freedesktop.DBus.Error.Failed';
103+
}
104+
self.object.service.bus.dbus._sendErrorMessageReply(message, errorName, errorMessage);
105+
100106
return;
101107
}
102108

@@ -116,9 +122,9 @@ ServiceInterface.prototype.getProperty = function(propName, callback) {
116122
return false;
117123
}
118124

119-
prop.getter.apply(this, [ function(value) {
125+
prop.getter.apply(this, [ function(err, value) {
120126
if (callback)
121-
callback(value);
127+
callback(err, value);
122128
} ]);
123129

124130
return true;
@@ -133,9 +139,9 @@ ServiceInterface.prototype.setProperty = function(propName, value, callback) {
133139

134140
var args = [value];
135141

136-
args.push(function() {
142+
args.push(function(err) {
137143
// Completed
138-
callback();
144+
callback(err);
139145
});
140146

141147
prop.setter.apply(this, args);
@@ -152,15 +158,20 @@ ServiceInterface.prototype.getProperties = function(callback) {
152158

153159
// Getting property
154160
var prop = self.properties[propName];
155-
prop.getter(function(value) {
161+
prop.getter(function(err, value) {
162+
if (err) {
163+
// TODO: What do we do if a property throws an error?
164+
// For now, just skip the property?
165+
return next();
166+
}
156167
properties[propName] = value;
157168
next();
158169
});
159170

160171
return true;
161172
}, function() {
162173
if (callback)
163-
callback(properties);
174+
callback(null, properties);
164175
});
165176
};
166177

lib/service_object.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ var ServiceObject = module.exports = function(service, objectPath) {
1616
self.introspectableInterface = self.createInterface('org.freedesktop.DBus.Introspectable');
1717
self.introspectableInterface.addMethod('Introspect', { out: Utils.Define(String, 'data') }, function(callback) {
1818
self.updateIntrospection();
19-
callback(self.introspection);
19+
callback(null, self.introspection);
2020
});
2121
self.introspectableInterface.update();
2222

@@ -31,12 +31,12 @@ var ServiceObject = module.exports = function(service, objectPath) {
3131
}, function(interfaceName, propName, callback) {
3232
var iface = self['interfaces'][interfaceName];
3333
if (!iface) {
34-
callback('Doesn\'t support such property');
34+
callback(new Error('Doesn\'t support such property'));
3535
return;
3636
}
3737

3838
if (!iface.getProperty(propName, callback))
39-
callback('Doesn\'t support such property');
39+
callback(new Error('Doesn\'t support such property'));
4040
});
4141

4242
self.propertyInterface.addMethod('Set', {
@@ -48,12 +48,12 @@ var ServiceObject = module.exports = function(service, objectPath) {
4848
}, function(interfaceName, propName, value, callback) {
4949
var iface = self['interfaces'][interfaceName];
5050
if (!iface) {
51-
callback('Doesn\'t support such property');
51+
callback(new Error('Doesn\'t support such property'));
5252
return;
5353
}
5454

5555
if (!iface.setProperty(propName, value, callback))
56-
callback('Doesn\'t support such property');
56+
callback(new Error('Doesn\'t support such property'));
5757
});
5858

5959
self.propertyInterface.addMethod('GetAll', {
@@ -64,12 +64,12 @@ var ServiceObject = module.exports = function(service, objectPath) {
6464
}, function(interfaceName, callback) {
6565
var iface = self['interfaces'][interfaceName];
6666
if (!iface) {
67-
callback('Doesn\'t have any properties');
67+
callback(new Error('Doesn\'t have any properties'));
6868
return;
6969
}
7070

71-
iface.getProperties(function(props) {
72-
callback(props);
71+
iface.getProperties(function(err, props) {
72+
callback(err, props);
7373
});
7474
});
7575

test/client-call-error.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ withService('service.js', function(err, done) {
88

99
var bus = DBus.getBus('session');
1010

11-
bus.getInterface('test.dbus.TestService', '/test/dbus/TestService', 'test.dbus.TestService.Interface1', function(err, iface) {
11+
bus.getInterface('test.dbus.TestService', '/test/dbus/TestService', 'test.dbus.TestService.ErrorInterface', function(err, iface) {
1212
iface.ThrowsError({ timeout: 1000 }, function(err, result) {
1313
tap.notSame(err, null);
1414
tap.same(result, null);

test/client-call-object.test.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
var withService = require('./with-service');
2+
var tap = require('tap');
3+
var DBus = require('../');
4+
5+
tap.plan(3);
6+
withService('service.js', function(err, done) {
7+
if (err) throw err;
8+
9+
var dbus = new DBus();
10+
var bus = dbus.getBus('session');
11+
12+
bus.getInterface('test.dbus.TestService', '/test/dbus/TestService', 'test.dbus.TestService.Interface1', function(err, iface) {
13+
// With options
14+
iface.Object({ one: 'One', two: [1,2] }, { timeout: 1000 }, function(err, result) {
15+
tap.notSame(result, null);
16+
tap.equal(result.one, 'One');
17+
tap.same(result.two, [1, 2]);
18+
19+
done();
20+
bus.disconnect();
21+
});
22+
});
23+
});

test/client-property-error.test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ withService('service.js', function(err, done) {
88

99
var bus = DBus.getBus('session');
1010

11-
bus.getInterface('test.dbus.TestService', '/test/dbus/TestService', 'test.dbus.TestService.Interface1', function(err, iface) {
11+
bus.getInterface('test.dbus.TestService', '/test/dbus/TestService', 'test.dbus.TestService.ErrorInterface', function(err, iface) {
1212
iface.getProperty('ErrorProperty', function(err, value) {
1313
tap.notSame(err, null);
1414
tap.same(value, null);

test/service-dynamic.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ process.on('message', function(msg) {
1414
subiface.addProperty('Value', {
1515
type: DBus.Define(String),
1616
getter: function(callback) {
17-
callback(value);
17+
callback(null, value);
1818
}
1919
});
2020
subiface.update();

test/service.js

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -9,42 +9,33 @@ var obj = service.createObject('/test/dbus/TestService');
99
var iface1 = obj.createInterface('test.dbus.TestService.Interface1');
1010

1111
iface1.addMethod('NoArgs', { out: DBus.Define(String) }, function(callback) {
12-
callback('result!');
12+
callback(null, 'result!');
1313
});
1414

1515
iface1.addMethod('Add', { in: [DBus.Define(Number), DBus.Define(Number)], out: DBus.Define(Number) }, function(n1, n2, callback) {
16-
callback(n1 + n2);
16+
callback(null, n1 + n2);
1717
});
1818

19-
iface1.addMethod('LongProcess', { out: DBus.Define(Number) }, function(callback) {
20-
setTimeout(function() {
21-
callback(0);
22-
}, 5000).unref();
23-
});
24-
25-
iface1.addMethod('ThrowsError', { out: DBus.Define(Number) }, function(callback) {
26-
setTimeout(function() {
27-
callback(new Error('This is an error thrown from the service'));
28-
}, 100);
19+
iface1.addMethod('Object', { in: [DBus.Define(Object)], out: DBus.Define(Object) }, function(obj, callback) {
20+
callback(null, obj);
2921
});
3022

31-
iface1.addMethod('ThrowsCustomError', { out: DBus.Define(Number) }, function(callback) {
23+
iface1.addMethod('LongProcess', { out: DBus.Define(Number) }, function(callback) {
3224
setTimeout(function() {
33-
var error = new DBus.Error('test.dbus.TestService.Error', 'This is an error thrown from the service');
34-
callback(error);
35-
}, 100);
25+
callback(null, 0);
26+
}, 5000).unref();
3627
});
3728

3829
var author = 'Fred Chien';
3930
iface1.addProperty('Author', {
4031
type: DBus.Define(String),
4132
getter: function(callback) {
42-
callback(author);
33+
callback(null, author);
4334
},
44-
setter: function(value, complete) {
35+
setter: function(value, callback) {
4536
author = value;
4637

47-
complete();
38+
callback();
4839
}
4940
});
5041

@@ -53,15 +44,7 @@ var url = 'http://stem.mandice.org';
5344
iface1.addProperty('URL', {
5445
type: DBus.Define(String),
5546
getter: function(callback) {
56-
callback(url);
57-
}
58-
});
59-
60-
// Read-only property
61-
iface1.addProperty('ErrorProperty', {
62-
type: DBus.Define(String),
63-
getter: function(callback) {
64-
callback(new Error('This is an error thrown from the service'));
47+
callback(null, url);
6548
}
6649
});
6750

@@ -82,11 +65,35 @@ var interval = setInterval(function() {
8265
}, 1000);
8366
interval.unref();
8467

68+
var errors = obj.createInterface('test.dbus.TestService.ErrorInterface');
69+
70+
errors.addMethod('ThrowsError', { out: DBus.Define(Number) }, function(callback) {
71+
setTimeout(function() {
72+
callback(new Error('This is an error thrown from the service'));
73+
}, 100);
74+
});
75+
76+
errors.addMethod('ThrowsCustomError', { out: DBus.Define(Number) }, function(callback) {
77+
setTimeout(function() {
78+
var error = new DBus.Error('test.dbus.TestService.Error', 'This is an error thrown from the service');
79+
callback(error);
80+
}, 100);
81+
});
82+
83+
errors.addProperty('ErrorProperty', {
84+
type: DBus.Define(String),
85+
getter: function(callback) {
86+
callback(new Error('This is an error thrown from the service'));
87+
}
88+
});
89+
90+
errors.update();
91+
8592
// Create second interface
8693
var iface2 = obj.createInterface('test.dbus.TestService.Interface2');
8794

8895
iface2.addMethod('Hello', { out: DBus.Define(String) }, function(callback) {
89-
callback('Hello There!');
96+
callback(null, 'Hello There!');
9097
});
9198

9299
iface2.update();

0 commit comments

Comments
 (0)