diff --git a/src/Device.js b/src/Device.js index c4c8585..ff91d58 100644 --- a/src/Device.js +++ b/src/Device.js @@ -16,6 +16,19 @@ class Device extends EventEmitter { this.adapter = adapter this.device = device this.helper = new BusHelper(dbus, 'org.bluez', `/org/bluez/${adapter}/${device}`, 'org.bluez.Device1', { usePropsEvents: true }) + + const cb = (propertiesChanged) => { + if ('Connected' in propertiesChanged) { + const { value } = propertiesChanged.Connected + if (value) { + this.emit('connect', { connected: true }) + } else { + this.emit('disconnect', { connected: false }) + } + } + } + + this.helper.on('PropertiesChanged', cb) } /** @@ -124,18 +137,6 @@ class Device extends EventEmitter { * Connect to remote device */ async connect () { - const cb = (propertiesChanged) => { - if ('Connected' in propertiesChanged) { - const { value } = propertiesChanged.Connected - if (value) { - this.emit('connect', { connected: true }) - } else { - this.emit('disconnect', { connected: false }) - } - } - } - - this.helper.on('PropertiesChanged', cb) await this.helper.callMethod('Connect') } diff --git a/test/Device.spec.js b/test/Device.spec.js index cb6196d..7069d80 100644 --- a/test/Device.spec.js +++ b/test/Device.spec.js @@ -89,7 +89,7 @@ test('gatt server initialization', async () => { expect(gattServer.init).toHaveBeenCalledTimes(1) }) -test('event:valuechanged', async () => { +test('event:connect', async () => { const device = new Device(dbus, 'hci0', 'dev_00_00_00_00_00_00') const connectedFn = jest.fn() @@ -114,3 +114,36 @@ test('event:valuechanged', async () => { await device.disconnect() }) + +test('event:connect once per connect', async () => { + const device = new Device(dbus, 'hci0', 'dev_00_00_00_00_00_00') + + const connectedFn = jest.fn() + const disconnectedFn = jest.fn() + + device.on('connect', connectedFn) + device.on('disconnect', disconnectedFn) + + await device.connect() + device.helper.emit('PropertiesChanged', + { Connected: { signature: 'b', value: true } } + ) + + await device.disconnect() + device.helper.emit('PropertiesChanged', + { Connected: { signature: 'b', value: false } } + ) + + await device.connect() + device.helper.emit('PropertiesChanged', + { Connected: { signature: 'b', value: true } } + ) + + await device.disconnect() + device.helper.emit('PropertiesChanged', + { Connected: { signature: 'b', value: false } } + ) + + expect(connectedFn).toHaveBeenCalledTimes(2) + expect(disconnectedFn).toHaveBeenCalledTimes(2) +})