Skip to content

Commit 5234d19

Browse files
author
Tony Crisci
committed
handle no reply expected flag for message
1 parent 9a7c5c0 commit 5234d19

2 files changed

Lines changed: 29 additions & 10 deletions

File tree

lib/bus.js

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -244,14 +244,18 @@ class MessageBus extends EventEmitter {
244244
msg.serial = this._newSerial();
245245
}
246246
msg._sent = true;
247-
this._methodReturnHandlers[msg.serial] = (reply) => {
248-
this._nameOwners[msg.destination] = reply.sender;
249-
if (reply.type === constants.messageType.ERROR) {
250-
return reject(new DBusError(reply.errorName, reply.body[0], reply));
251-
} else {
252-
return resolve(reply);
253-
}
254-
};
247+
if (msg.flags & constants.flags.noReplyExpected) {
248+
resolve(null);
249+
} else {
250+
this._methodReturnHandlers[msg.serial] = (reply) => {
251+
this._nameOwners[msg.destination] = reply.sender;
252+
if (reply.type === constants.messageType.ERROR) {
253+
return reject(new DBusError(reply.errorName, reply.body[0], reply));
254+
} else {
255+
return resolve(reply);
256+
}
257+
};
258+
}
255259
this._connection.message(msg);
256260
});
257261
};

test/integration/low-level.test.js

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,7 @@ test('send a method call between buses', async () => {
5656
bus1._addMethodHandler(methodReturnHandler);
5757
expect(bus1._methodHandlers.length).toEqual(1);
5858

59-
const reply = await bus2._call(msg);
59+
let reply = await bus2._call(msg);
6060

6161
expect(bus1._methodHandlers.length).toEqual(0);
6262
expect(reply.type).toEqual(MESSAGE_TYPE_METHOD_RETURN);
@@ -100,6 +100,21 @@ test('send a method call between buses', async () => {
100100

101101
expect(error.type).toEqual('org.test.Error');
102102
expect(error.message).toEqual('throwing an error');
103+
104+
// with no reply expected
105+
let waitForMessage = new Promise((resolve) => {
106+
bus1.once('message', (msg) => {
107+
if (msg.sender === bus2.name) {
108+
resolve(msg);
109+
}
110+
});
111+
});
112+
113+
msg.flags = dbus.MESSAGE_FLAG_NO_REPLY_EXPECTED;
114+
let result = await bus2._call(msg);
115+
expect(result).toBeNull();
116+
reply = await waitForMessage;
117+
expect(reply).toBeInstanceOf(Message);
103118
});
104119

105120
test('send a signal between buses', async () => {
@@ -114,7 +129,7 @@ test('send a signal between buses', async () => {
114129
await bus1._call(addMatchMessage)
115130

116131
let waitForMessage = new Promise((resolve) => {
117-
bus1.on('message', (msg) => {
132+
bus1.once('message', (msg) => {
118133
if (msg.sender === bus2.name) {
119134
resolve(msg);
120135
}

0 commit comments

Comments
 (0)