From 27af7ec3a6953eef7831c6569b06d10cd5358d40 Mon Sep 17 00:00:00 2001 From: Sacha Froment Date: Mon, 19 Nov 2018 17:41:04 +0100 Subject: [PATCH] fix(ble): fix conn.Close on Java Signed-off-by: Sacha Froment --- .../ble/src/main/java/chat/berty/ble/Manager.java | 10 ++++++++++ client/react-native/gomobile/core/java.go | 1 + core/network/ble/java.go | 12 ++++++++++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/client/react-native/android/ble/src/main/java/chat/berty/ble/Manager.java b/client/react-native/android/ble/src/main/java/chat/berty/ble/Manager.java index aa559f11f9..17db6ae41d 100644 --- a/client/react-native/android/ble/src/main/java/chat/berty/ble/Manager.java +++ b/client/react-native/android/ble/src/main/java/chat/berty/ble/Manager.java @@ -181,6 +181,16 @@ public void closeScannerAndAdvertiser() { } } + public void closeConnFromMa(String rMa) { + BertyDevice bDevice = getDeviceFromMa(rMa); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) { + bDevice.gatt.disconnect(); + } + synchronized (bertyDevices) { + bertyDevices.remove(bDevice.addr); + } + } + public static Manager getInstance() { if (instance == null) { synchronized (Manager.class) { diff --git a/client/react-native/gomobile/core/java.go b/client/react-native/gomobile/core/java.go index 520358a547..dc98ce45a0 100644 --- a/client/react-native/gomobile/core/java.go +++ b/client/react-native/gomobile/core/java.go @@ -18,6 +18,7 @@ func initBleFunc() { ble.DialPeer = Manager.GetInstance().DialPeer ble.InitScannerAndAdvertiser = Manager.GetInstance().InitScannerAndAdvertiser ble.CloseScannerAndAdvertiser = Manager.GetInstance().CloseScannerAndAdvertiser + ble.CloseConnFromMa = Manager.GetInstance().CloseConnFromMa } func JavaToGo() string { diff --git a/core/network/ble/java.go b/core/network/ble/java.go index 2052fcffd6..028bafdf19 100644 --- a/core/network/ble/java.go +++ b/core/network/ble/java.go @@ -19,6 +19,7 @@ var Write func(p []byte, ma string) bool = nil var DialPeer func(ma string) bool = nil var InitScannerAndAdvertiser func() = nil var CloseScannerAndAdvertiser func() = nil +var CloseConnFromMa func(ma string) = nil func (t *Transport) Dial(ctx context.Context, rAddr ma.Multiaddr, p peer.ID) (tpt.Conn, error) { // if int(C.isDiscovering()) != 1 { @@ -42,8 +43,15 @@ func (t *Transport) Dial(ctx context.Context, rAddr ma.Multiaddr, p peer.ID) (tp } func (b *Conn) Close() error { - // logger().Debug("BLEConn Close") - // b.closed = true + logger().Debug("BLEConn Close") + if b.closed == false { + val, err := b.rAddr.ValueForProtocol(PBle) + if err != nil { + return err + } + CloseConnFromMa(val) + } + b.closed = true // val, err := b.rAddr.ValueForProtocol(PBle) // if err != nil { // logger().Debug("BLEConn close", zap.Error(err))