@@ -277,27 +277,36 @@ export default function(RED) {
277277 this . emit ( 'disconnected' ) ;
278278 return Promise . resolve ( ) ;
279279 }
280+ let connecting = ( peripheral . state === 'connecting' ) ;
280281 switch ( peripheral . state ) {
281282 case 'disconnected' : {
282283 this . emit ( 'disconnected' ) ;
283- peripheral . once ( 'disconnect' , ( ) => {
284- this . emit ( 'disconnected' ) ;
285- } ) ;
286- peripheral . _disconnectedHandlerSet = true ;
287- peripheral . once ( 'connect' , ( ) => {
288- peripheral . discoverAllServicesAndCharacteristics (
289- ( err , services ) => {
290- if ( err ) {
291- this . log ( `<discoverAllServicesAndCharacteristics> error:${ err . message } ` ) ;
292- return ;
293- }
294- this . emit ( 'connected' ) ;
295- this . characteristics = services . reduce ( ( prev , curr ) => {
296- return prev . concat ( curr . characteristics ) ;
297- } , [ ] ) . map ( ( c ) => toCharacteristic ( c ) ) ;
284+ if ( ! peripheral . _disconnectedHandlerSet ) {
285+ peripheral . _disconnectedHandlerSet = true ;
286+ peripheral . once ( 'disconnect' , ( ) => {
287+ this . emit ( 'disconnected' ) ;
288+ peripheral . _disconnectedHandlerSet = false ;
298289 } ) ;
299- } ) ;
290+ }
291+ if ( ! peripheral . _connectHandlerSet ) {
292+ peripheral . _connectHandlerSet = true ;
293+ peripheral . once ( 'connect' , ( ) => {
294+ peripheral . _connectHandlerSet = false ;
295+ peripheral . discoverAllServicesAndCharacteristics (
296+ ( err , services ) => {
297+ if ( err ) {
298+ this . log ( `<discoverAllServicesAndCharacteristics> error:${ err . message } ` ) ;
299+ return ;
300+ }
301+ this . emit ( 'connected' ) ;
302+ this . characteristics = services . reduce ( ( prev , curr ) => {
303+ return prev . concat ( curr . characteristics ) ;
304+ } , [ ] ) . map ( ( c ) => toCharacteristic ( c ) ) ;
305+ } ) ;
306+ } ) ;
307+ }
300308 peripheral . connect ( ) ; // peripheral.state => connecting
309+ connecting = true ;
301310 break ;
302311 }
303312 case 'connected' : {
@@ -310,6 +319,7 @@ export default function(RED) {
310319 peripheral . _disconnectedHandlerSet = true ;
311320 peripheral . once ( 'disconnect' , ( ) => {
312321 this . emit ( 'disconnected' ) ;
322+ peripheral . _disconnectedHandlerSet = false ;
313323 } ) ;
314324 }
315325 this . emit ( 'connected' ) ;
@@ -319,7 +329,7 @@ export default function(RED) {
319329 break ;
320330 }
321331 }
322- if ( peripheral . state === ' connecting' ) {
332+ if ( connecting ) {
323333 return new Promise ( ( resolve ) => {
324334 let retry = 0 ;
325335 let connectedHandler = ( ) => {
0 commit comments