lsongdev / lsongdev/node-bluetooth
Detecting bluetooth device disconnects/crashes
Nadie ha tomado este issue todavía.
- Lenguaje dominante
- C++
- Estrellas
- 205
- Forks
- 56
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Descripción
Hi!
I couldn't find a way to detect if a connection has crashed or disconnected so I tried to implement my own.
In lib/connection.js, I noticed that - if I printed the chunks of the read method - they stop printing as soon as I turn off my bluetooth device; after ~20seconds of apparent frozen behavior, this method continued working, printing chunks of zero length buffers.
Thus, I added the following line
if(chunk.length == 0){ self.emit('error')}
in
(function read(){
self.isOpen() && self.port.read((err, chunk) => {
process.nextTick(read);
if(err) return self.emit('error', err);
self.emit('data', chunk);
if(chunk.length == 0){ self.emit('error')}
});
})();
This allows me to fetch error events like so:
connect(address, 1, (err, linkage) => {
if (err) {
console.log('connection attempt error');
} else {
linkage.on('error', (err) => {
console.log('disconnected!);
});
}
)}
However my approach assumes I won't be receiving zero length buffers when connected which I realize that might not always be true (or not for all devices);
Also, any thoughts on how to detect the disconnect before the ~20seconds pass?
Thanks!
Guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Línea de trabajo
Comienza con lib/connection.js e inspecciona el callback de lectura, incluido cómo se emiten los búferes de longitud cero y los errores de lectura. Reproduce el comportamiento de apagado de Bluetooth descrito en el issue y determina el evento de desconexión esperado y su momento. Se considera terminado cuando el comportamiento de desconexión está definido y cubierto sin asumir que los búferes de longitud cero son imposibles durante una conexión válida.
Escrito por el modelo de indexación a partir del texto del issue.
Evaluación
- Stack tecnológico
- javascript, node.js
- Área
- embedded-iot, networking
- Tipo de issue
- Error
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Estado de actividad
- Estancado
- Claridad
- Necesita aclaración
- Aptitud para principiantes
- 30/100