node-red-contrib-ble-central
Version:
noble library wrapper to put a node-red flow into BLE central mode
57 lines (47 loc) • 1.45 kB
JavaScript
/*
Purpose:
readerService mocks or activates the noble runtime
Usage:
- onMessage= -- sets the callback to be fired on message
- start -- starts the service, calling the registered callback on discover
- stop -- stops the reader
*/
let bleReader;
if(process.env.NO_BLUETOOTH){ // this allows for more rapid development of the UI tool, independent of the underlying hardware
bleReader = require('./mocks/bleReader');
} else {
bleReader = require('./bleReader');
}
class ReaderService {
constructor(){
this.messageCallback = this.messageCallback.bind(this);
this.errorCallback = this.errorCallback.bind(this);
this._onMessage = null;
// bleReader.startScanning(this.messageCallback, this.errorCallback, false, true)
}
start(){
bleReader.startScanning(this.messageCallback, this.errorCallback);
}
stop(){
bleReader.stopScanning();
}
messageCallback(message) {
return new Promise((resolve, reject) => {
if(this._onMessage !== null){
return resolve(this._onMessage(message));
}
return resolve(message);
});
}
errorCallback(error) {
return new Promise((resolve, reject) => {
return resolve(null, error)
});
}
set onMessage(callback) {
console.log("Changing onMessage callback: " + callback);
this._onMessage = callback;
}
}
const readerService = new ReaderService();
module.exports = readerService;