UNPKG

@genee/bluez

Version:

Bluez5 D-Bus library for easy to use bluetooth access in node

80 lines (70 loc) 2.86 kB
const { EventEmitter } = require("events"); class DbusInterfaceBase extends EventEmitter { constructor(interface_, bluez) { super(); this._interface = interface_; this._bluez = bluez; // forward property change events const forwardPropertyChange = (iface, changed, invalidated) => { if (iface === this._interface.interfaceName) { this.emit('PropertiesChanged', changed, invalidated); } } // get property interface this._interface.bus.getInterface(this._interface.serviceName, this._interface.objectPath, "org.freedesktop.DBus.Properties", (err, res) => { // TODO: handle error if (err) return; this._propertyInterface = res; // in case a handler was registerd before we got the interface, attach it now if (this.listenerCount('PropertiesChanged') > 0) { this._propertyInterface.on('PropertiesChanged', forwardPropertyChange); } }); // forward all signals this.on("newListener", (event, listener) => { if (event === "removeListener" || event === "newListener") return; if (event === "PropertiesChanged") { if (this.listenerCount('PropertiesChanged') === 0 && this._propertyInterface) { this._propertyInterface.on('PropertiesChanged', forwardPropertyChange); } } else { this._interface.on(event, listener); } }); this.on("removeListener", (event, listener) => { if (event === "removeListener" || event === "newListener") return; if (event === "PropertiesChanged") { if (this.listenerCount('PropertiesChanged') === 0 && this._propertyInterface) { this._propertyInterface.removeListener('PropertiesChanged', forwardPropertyChange); } } else { this._interface.removeListener(event, listener); } }); } getProperties() { return new Promise((resolve, reject) => { this._interface.getProperties((err, props) => { if (err) return reject(err); resolve(props); }) }); } getProperty(name) { return new Promise((resolve, reject) => { this._interface.getProperty(name, (err, val) => { if (err) return reject(err); resolve(val); }) }); } setProperty(name, value) { return new Promise((resolve, reject) => { this._interface.setProperty(name, value, (err) => { if (err) return reject(err); resolve(); }) }); } } module.exports = DbusInterfaceBase;