react-native-ble-nitro 1.10.3 → 1.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/android/src/main/cpp/cpp-adapter.cpp +4 -1
  2. package/android/src/main/java/com/margelo/nitro/co/zyke/ble/BleNitroBleManager.kt +58 -21
  3. package/ios/BleNitroBleManager.swift +60 -3
  4. package/ios/BlePeripheralDelegate.swift +68 -9
  5. package/lib/commonjs/index.d.ts +1 -1
  6. package/lib/commonjs/index.d.ts.map +1 -1
  7. package/lib/commonjs/index.js +2 -1
  8. package/lib/commonjs/index.js.map +1 -1
  9. package/lib/commonjs/manager.d.ts +19 -4
  10. package/lib/commonjs/manager.d.ts.map +1 -1
  11. package/lib/commonjs/manager.js +68 -33
  12. package/lib/commonjs/manager.js.map +1 -1
  13. package/lib/commonjs/specs/NativeBleNitro.nitro.d.ts +3 -0
  14. package/lib/commonjs/specs/NativeBleNitro.nitro.d.ts.map +1 -1
  15. package/lib/index.d.ts +1 -1
  16. package/lib/index.js +1 -1
  17. package/lib/manager.d.ts +19 -4
  18. package/lib/manager.js +66 -32
  19. package/lib/specs/NativeBleNitro.nitro.d.ts +3 -0
  20. package/nitrogen/generated/android/BleNitroOnLoad.cpp +48 -32
  21. package/nitrogen/generated/android/BleNitroOnLoad.hpp +13 -4
  22. package/nitrogen/generated/android/c++/JHybridNativeBleNitroFactorySpec.cpp +20 -26
  23. package/nitrogen/generated/android/c++/JHybridNativeBleNitroFactorySpec.hpp +19 -22
  24. package/nitrogen/generated/android/c++/JHybridNativeBleNitroSpec.cpp +52 -49
  25. package/nitrogen/generated/android/c++/JHybridNativeBleNitroSpec.hpp +21 -22
  26. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/HybridNativeBleNitroFactorySpec.kt +15 -18
  27. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/HybridNativeBleNitroSpec.kt +28 -18
  28. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/Variant_NullType_BLEDevice.kt +0 -6
  29. package/nitrogen/generated/android/kotlin/com/margelo/nitro/co/zyke/ble/Variant_NullType_String.kt +0 -6
  30. package/nitrogen/generated/ios/c++/HybridNativeBleNitroSpecSwift.hpp +14 -0
  31. package/nitrogen/generated/ios/swift/HybridNativeBleNitroSpec.swift +2 -0
  32. package/nitrogen/generated/ios/swift/HybridNativeBleNitroSpec_cxx.swift +28 -0
  33. package/nitrogen/generated/shared/c++/HybridNativeBleNitroSpec.cpp +2 -0
  34. package/nitrogen/generated/shared/c++/HybridNativeBleNitroSpec.hpp +2 -0
  35. package/package.json +9 -9
  36. package/src/__tests__/index.test.ts +145 -1
  37. package/src/index.ts +1 -0
  38. package/src/manager.ts +96 -34
  39. package/src/specs/NativeBleNitro.nitro.ts +3 -0
@@ -74,12 +74,15 @@ export interface NativeBleNitro extends HybridObject<{
74
74
  requestMTU(deviceId: string, mtu: number): number;
75
75
  readRSSI(deviceId: string, callback: ReadRSSICallback): void;
76
76
  discoverServices(deviceId: string, callback: OperationCallback): void;
77
+ /** Discover services and wait for all characteristic discovery to complete before resolving. */
78
+ discoverServicesWithCharacteristics(deviceId: string, callback: OperationCallback): void;
77
79
  getServices(deviceId: string): string[];
78
80
  getCharacteristics(deviceId: string, serviceId: string): string[];
79
81
  readCharacteristic(deviceId: string, serviceId: string, characteristicId: string, callback: ReadCharacteristicCallback): void;
80
82
  writeCharacteristic(deviceId: string, serviceId: string, characteristicId: string, data: BLEValue, withResponse: boolean, callback: WriteCharacteristicCallback): void;
81
83
  subscribeToCharacteristic(deviceId: string, serviceId: string, characteristicId: string, updateCallback: CharacteristicCallback, completionCallback: OperationCallback): void;
82
84
  unsubscribeFromCharacteristic(deviceId: string, serviceId: string, characteristicId: string, callback: OperationCallback): void;
85
+ isSubscribedToCharacteristic(deviceId: string, serviceId: string, characteristicId: string): boolean;
83
86
  requestBluetoothEnable(callback: OperationCallback): void;
84
87
  state(): BLEState;
85
88
  subscribeToStateChange(stateCallback: StateCallback): OperationResult;
@@ -31,42 +31,58 @@
31
31
  namespace margelo::nitro::co::zyke::ble {
32
32
 
33
33
  int initialize(JavaVM* vm) {
34
+ return facebook::jni::initialize(vm, []() {
35
+ ::margelo::nitro::co::zyke::ble::registerAllNatives();
36
+ });
37
+ }
38
+
39
+ struct JHybridNativeBleNitroSpecImpl: public jni::JavaClass<JHybridNativeBleNitroSpecImpl, JHybridNativeBleNitroSpec::JavaPart> {
40
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/co/zyke/ble/BleNitroBleManager;";
41
+ static std::shared_ptr<JHybridNativeBleNitroSpec> create() {
42
+ static auto constructorFn = javaClassStatic()->getConstructor<JHybridNativeBleNitroSpecImpl::javaobject()>();
43
+ jni::local_ref<JHybridNativeBleNitroSpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
44
+ return javaPart->getJHybridNativeBleNitroSpec();
45
+ }
46
+ };
47
+ struct JHybridNativeBleNitroFactorySpecImpl: public jni::JavaClass<JHybridNativeBleNitroFactorySpecImpl, JHybridNativeBleNitroFactorySpec::JavaPart> {
48
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/co/zyke/ble/BleNitroBleManagerFactory;";
49
+ static std::shared_ptr<JHybridNativeBleNitroFactorySpec> create() {
50
+ static auto constructorFn = javaClassStatic()->getConstructor<JHybridNativeBleNitroFactorySpecImpl::javaobject()>();
51
+ jni::local_ref<JHybridNativeBleNitroFactorySpec::JavaPart> javaPart = javaClassStatic()->newObject(constructorFn);
52
+ return javaPart->getJHybridNativeBleNitroFactorySpec();
53
+ }
54
+ };
55
+
56
+ void registerAllNatives() {
34
57
  using namespace margelo::nitro;
35
58
  using namespace margelo::nitro::co::zyke::ble;
36
- using namespace facebook;
37
59
 
38
- return facebook::jni::initialize(vm, [] {
39
- // Register native JNI methods
40
- margelo::nitro::co::zyke::ble::JHybridNativeBleNitroSpec::registerNatives();
41
- margelo::nitro::co::zyke::ble::JFunc_void_std__vector_BLEDevice__cxx::registerNatives();
42
- margelo::nitro::co::zyke::ble::JFunc_void_std__optional_std__variant_nitro__NullType__BLEDevice___std__optional_std__variant_nitro__NullType__std__string___cxx::registerNatives();
43
- margelo::nitro::co::zyke::ble::JFunc_void_bool_std__string_std__string_cxx::registerNatives();
44
- margelo::nitro::co::zyke::ble::JFunc_void_std__string_bool_std__string_cxx::registerNatives();
45
- margelo::nitro::co::zyke::ble::JFunc_void_bool_std__string_cxx::registerNatives();
46
- margelo::nitro::co::zyke::ble::JFunc_void_bool_double_std__string_cxx::registerNatives();
47
- margelo::nitro::co::zyke::ble::JFunc_void_bool_std__shared_ptr_ArrayBuffer__std__string_cxx::registerNatives();
48
- margelo::nitro::co::zyke::ble::JFunc_void_std__string_std__shared_ptr_ArrayBuffer__cxx::registerNatives();
49
- margelo::nitro::co::zyke::ble::JFunc_void_BLEState_cxx::registerNatives();
50
- margelo::nitro::co::zyke::ble::JHybridNativeBleNitroFactorySpec::registerNatives();
60
+ // Register native JNI methods
61
+ margelo::nitro::co::zyke::ble::JHybridNativeBleNitroSpec::CxxPart::registerNatives();
62
+ margelo::nitro::co::zyke::ble::JFunc_void_std__vector_BLEDevice__cxx::registerNatives();
63
+ margelo::nitro::co::zyke::ble::JFunc_void_std__optional_std__variant_nitro__NullType__BLEDevice___std__optional_std__variant_nitro__NullType__std__string___cxx::registerNatives();
64
+ margelo::nitro::co::zyke::ble::JFunc_void_bool_std__string_std__string_cxx::registerNatives();
65
+ margelo::nitro::co::zyke::ble::JFunc_void_std__string_bool_std__string_cxx::registerNatives();
66
+ margelo::nitro::co::zyke::ble::JFunc_void_bool_std__string_cxx::registerNatives();
67
+ margelo::nitro::co::zyke::ble::JFunc_void_bool_double_std__string_cxx::registerNatives();
68
+ margelo::nitro::co::zyke::ble::JFunc_void_bool_std__shared_ptr_ArrayBuffer__std__string_cxx::registerNatives();
69
+ margelo::nitro::co::zyke::ble::JFunc_void_std__string_std__shared_ptr_ArrayBuffer__cxx::registerNatives();
70
+ margelo::nitro::co::zyke::ble::JFunc_void_BLEState_cxx::registerNatives();
71
+ margelo::nitro::co::zyke::ble::JHybridNativeBleNitroFactorySpec::CxxPart::registerNatives();
51
72
 
52
- // Register Nitro Hybrid Objects
53
- HybridObjectRegistry::registerHybridObjectConstructor(
54
- "NativeBleNitro",
55
- []() -> std::shared_ptr<HybridObject> {
56
- static DefaultConstructableObject<JHybridNativeBleNitroSpec::javaobject> object("com/margelo/nitro/co/zyke/ble/BleNitroBleManager");
57
- auto instance = object.create();
58
- return instance->cthis()->shared();
59
- }
60
- );
61
- HybridObjectRegistry::registerHybridObjectConstructor(
62
- "NativeBleNitroFactory",
63
- []() -> std::shared_ptr<HybridObject> {
64
- static DefaultConstructableObject<JHybridNativeBleNitroFactorySpec::javaobject> object("com/margelo/nitro/co/zyke/ble/BleNitroBleManagerFactory");
65
- auto instance = object.create();
66
- return instance->cthis()->shared();
67
- }
68
- );
69
- });
73
+ // Register Nitro Hybrid Objects
74
+ HybridObjectRegistry::registerHybridObjectConstructor(
75
+ "NativeBleNitro",
76
+ []() -> std::shared_ptr<HybridObject> {
77
+ return JHybridNativeBleNitroSpecImpl::create();
78
+ }
79
+ );
80
+ HybridObjectRegistry::registerHybridObjectConstructor(
81
+ "NativeBleNitroFactory",
82
+ []() -> std::shared_ptr<HybridObject> {
83
+ return JHybridNativeBleNitroFactorySpecImpl::create();
84
+ }
85
+ );
70
86
  }
71
87
 
72
88
  } // namespace margelo::nitro::co::zyke::ble
@@ -6,20 +6,29 @@
6
6
  ///
7
7
 
8
8
  #include <jni.h>
9
+ #include <functional>
9
10
  #include <NitroModules/NitroDefines.hpp>
10
11
 
11
12
  namespace margelo::nitro::co::zyke::ble {
12
13
 
14
+ [[deprecated("Use registerNatives() instead.")]]
15
+ int initialize(JavaVM* vm);
16
+
13
17
  /**
14
- * Initializes the native (C++) part of BleNitro, and autolinks all Hybrid Objects.
15
- * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`).
18
+ * Register the native (C++) part of BleNitro, and autolinks all Hybrid Objects.
19
+ * Call this in your `JNI_OnLoad` function (probably inside `cpp-adapter.cpp`),
20
+ * inside a `facebook::jni::initialize(vm, ...)` call.
16
21
  * Example:
17
22
  * ```cpp (cpp-adapter.cpp)
18
23
  * JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM* vm, void*) {
19
- * return margelo::nitro::co::zyke::ble::initialize(vm);
24
+ * return facebook::jni::initialize(vm, []() {
25
+ * // register all BleNitro HybridObjects
26
+ * margelo::nitro::co::zyke::ble::registerNatives();
27
+ * // any other custom registrations go here.
28
+ * });
20
29
  * }
21
30
  * ```
22
31
  */
23
- int initialize(JavaVM* vm);
32
+ void registerAllNatives();
24
33
 
25
34
  } // namespace margelo::nitro::co::zyke::ble
@@ -36,37 +36,31 @@ namespace margelo::nitro::co::zyke::ble { struct ManufacturerDataEntry; }
36
36
 
37
37
  namespace margelo::nitro::co::zyke::ble {
38
38
 
39
- jni::local_ref<JHybridNativeBleNitroFactorySpec::jhybriddata> JHybridNativeBleNitroFactorySpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
40
- return makeCxxInstance(jThis);
41
- }
42
-
43
- void JHybridNativeBleNitroFactorySpec::registerNatives() {
44
- registerHybrid({
45
- makeNativeMethod("initHybrid", JHybridNativeBleNitroFactorySpec::initHybrid),
46
- });
39
+ std::shared_ptr<JHybridNativeBleNitroFactorySpec> JHybridNativeBleNitroFactorySpec::JavaPart::getJHybridNativeBleNitroFactorySpec() {
40
+ auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
41
+ auto castHybridObject = std::dynamic_pointer_cast<JHybridNativeBleNitroFactorySpec>(hybridObject);
42
+ if (castHybridObject == nullptr) [[unlikely]] {
43
+ throw std::runtime_error("Failed to downcast JHybridObject to JHybridNativeBleNitroFactorySpec!");
44
+ }
45
+ return castHybridObject;
47
46
  }
48
47
 
49
- size_t JHybridNativeBleNitroFactorySpec::getExternalMemorySize() noexcept {
50
- static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
51
- return method(_javaPart);
48
+ jni::local_ref<JHybridNativeBleNitroFactorySpec::CxxPart::jhybriddata> JHybridNativeBleNitroFactorySpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
49
+ return makeCxxInstance(jThis);
52
50
  }
53
51
 
54
- bool JHybridNativeBleNitroFactorySpec::equals(const std::shared_ptr<HybridObject>& other) {
55
- if (auto otherCast = std::dynamic_pointer_cast<JHybridNativeBleNitroFactorySpec>(other)) {
56
- return _javaPart == otherCast->_javaPart;
52
+ std::shared_ptr<JHybridObject> JHybridNativeBleNitroFactorySpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
53
+ auto castJavaPart = jni::dynamic_ref_cast<JHybridNativeBleNitroFactorySpec::JavaPart>(javaPart);
54
+ if (castJavaPart == nullptr) [[unlikely]] {
55
+ throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridNativeBleNitroFactorySpec::JavaPart!");
57
56
  }
58
- return false;
59
- }
60
-
61
- void JHybridNativeBleNitroFactorySpec::dispose() noexcept {
62
- static const auto method = javaClassStatic()->getMethod<void()>("dispose");
63
- method(_javaPart);
57
+ return std::make_shared<JHybridNativeBleNitroFactorySpec>(castJavaPart);
64
58
  }
65
59
 
66
- std::string JHybridNativeBleNitroFactorySpec::toString() {
67
- static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
68
- auto javaString = method(_javaPart);
69
- return javaString->toStdString();
60
+ void JHybridNativeBleNitroFactorySpec::CxxPart::registerNatives() {
61
+ registerHybrid({
62
+ makeNativeMethod("initHybrid", JHybridNativeBleNitroFactorySpec::CxxPart::initHybrid),
63
+ });
70
64
  }
71
65
 
72
66
  // Properties
@@ -74,9 +68,9 @@ namespace margelo::nitro::co::zyke::ble {
74
68
 
75
69
  // Methods
76
70
  std::shared_ptr<HybridNativeBleNitroSpec> JHybridNativeBleNitroFactorySpec::create(const std::optional<std::string>& nativeRestoreStateIdentifier, const std::optional<std::function<void(const std::vector<BLEDevice>& /* peripherals */)>>& restoreStateCallback) {
77
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JHybridNativeBleNitroSpec::javaobject>(jni::alias_ref<jni::JString> /* nativeRestoreStateIdentifier */, jni::alias_ref<JFunc_void_std__vector_BLEDevice_::javaobject> /* restoreStateCallback */)>("create_cxx");
71
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JHybridNativeBleNitroSpec::JavaPart>(jni::alias_ref<jni::JString> /* nativeRestoreStateIdentifier */, jni::alias_ref<JFunc_void_std__vector_BLEDevice_::javaobject> /* restoreStateCallback */)>("create_cxx");
78
72
  auto __result = method(_javaPart, nativeRestoreStateIdentifier.has_value() ? jni::make_jstring(nativeRestoreStateIdentifier.value()) : nullptr, restoreStateCallback.has_value() ? JFunc_void_std__vector_BLEDevice__cxx::fromCpp(restoreStateCallback.value()) : nullptr);
79
- return __result->cthis()->shared_cast<JHybridNativeBleNitroSpec>();
73
+ return __result->getJHybridNativeBleNitroSpec();
80
74
  }
81
75
 
82
76
  } // namespace margelo::nitro::co::zyke::ble
@@ -18,34 +18,33 @@ namespace margelo::nitro::co::zyke::ble {
18
18
 
19
19
  using namespace facebook;
20
20
 
21
- class JHybridNativeBleNitroFactorySpec: public jni::HybridClass<JHybridNativeBleNitroFactorySpec, JHybridObject>,
22
- public virtual HybridNativeBleNitroFactorySpec {
21
+ class JHybridNativeBleNitroFactorySpec: public virtual HybridNativeBleNitroFactorySpec, public virtual JHybridObject {
23
22
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/co/zyke/ble/HybridNativeBleNitroFactorySpec;";
25
- static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
26
- static void registerNatives();
27
-
28
- protected:
29
- // C++ constructor (called from Java via `initHybrid()`)
30
- explicit JHybridNativeBleNitroFactorySpec(jni::alias_ref<jhybridobject> jThis) :
31
- HybridObject(HybridNativeBleNitroFactorySpec::TAG),
32
- HybridBase(jThis),
33
- _javaPart(jni::make_global(jThis)) {}
23
+ struct JavaPart: public jni::JavaClass<JavaPart, JHybridObject::JavaPart> {
24
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/co/zyke/ble/HybridNativeBleNitroFactorySpec;";
25
+ std::shared_ptr<JHybridNativeBleNitroFactorySpec> getJHybridNativeBleNitroFactorySpec();
26
+ };
27
+ struct CxxPart: public jni::HybridClass<CxxPart, JHybridObject::CxxPart> {
28
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/co/zyke/ble/HybridNativeBleNitroFactorySpec$CxxPart;";
29
+ static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
30
+ static void registerNatives();
31
+ using HybridBase::HybridBase;
32
+ protected:
33
+ std::shared_ptr<JHybridObject> createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) override;
34
+ };
34
35
 
35
36
  public:
37
+ explicit JHybridNativeBleNitroFactorySpec(const jni::local_ref<JHybridNativeBleNitroFactorySpec::JavaPart>& javaPart):
38
+ HybridObject(HybridNativeBleNitroFactorySpec::TAG),
39
+ JHybridObject(javaPart),
40
+ _javaPart(jni::make_global(javaPart)) {}
36
41
  ~JHybridNativeBleNitroFactorySpec() override {
37
42
  // Hermes GC can destroy JS objects on a non-JNI Thread.
38
43
  jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); });
39
44
  }
40
45
 
41
46
  public:
42
- size_t getExternalMemorySize() noexcept override;
43
- bool equals(const std::shared_ptr<HybridObject>& other) override;
44
- void dispose() noexcept override;
45
- std::string toString() override;
46
-
47
- public:
48
- inline const jni::global_ref<JHybridNativeBleNitroFactorySpec::javaobject>& getJavaPart() const noexcept {
47
+ inline const jni::global_ref<JHybridNativeBleNitroFactorySpec::JavaPart>& getJavaPart() const noexcept {
49
48
  return _javaPart;
50
49
  }
51
50
 
@@ -58,9 +57,7 @@ namespace margelo::nitro::co::zyke::ble {
58
57
  std::shared_ptr<HybridNativeBleNitroSpec> create(const std::optional<std::string>& nativeRestoreStateIdentifier, const std::optional<std::function<void(const std::vector<BLEDevice>& /* peripherals */)>>& restoreStateCallback) override;
59
58
 
60
59
  private:
61
- friend HybridBase;
62
- using HybridBase::HybridBase;
63
- jni::global_ref<JHybridNativeBleNitroFactorySpec::javaobject> _javaPart;
60
+ jni::global_ref<JHybridNativeBleNitroFactorySpec::JavaPart> _javaPart;
64
61
  };
65
62
 
66
63
  } // namespace margelo::nitro::co::zyke::ble
@@ -63,75 +63,69 @@ namespace margelo::nitro::co::zyke::ble { enum class AndroidScanMode; }
63
63
 
64
64
  namespace margelo::nitro::co::zyke::ble {
65
65
 
66
- jni::local_ref<JHybridNativeBleNitroSpec::jhybriddata> JHybridNativeBleNitroSpec::initHybrid(jni::alias_ref<jhybridobject> jThis) {
67
- return makeCxxInstance(jThis);
68
- }
69
-
70
- void JHybridNativeBleNitroSpec::registerNatives() {
71
- registerHybrid({
72
- makeNativeMethod("initHybrid", JHybridNativeBleNitroSpec::initHybrid),
73
- });
66
+ std::shared_ptr<JHybridNativeBleNitroSpec> JHybridNativeBleNitroSpec::JavaPart::getJHybridNativeBleNitroSpec() {
67
+ auto hybridObject = JHybridObject::JavaPart::getJHybridObject();
68
+ auto castHybridObject = std::dynamic_pointer_cast<JHybridNativeBleNitroSpec>(hybridObject);
69
+ if (castHybridObject == nullptr) [[unlikely]] {
70
+ throw std::runtime_error("Failed to downcast JHybridObject to JHybridNativeBleNitroSpec!");
71
+ }
72
+ return castHybridObject;
74
73
  }
75
74
 
76
- size_t JHybridNativeBleNitroSpec::getExternalMemorySize() noexcept {
77
- static const auto method = javaClassStatic()->getMethod<jlong()>("getMemorySize");
78
- return method(_javaPart);
75
+ jni::local_ref<JHybridNativeBleNitroSpec::CxxPart::jhybriddata> JHybridNativeBleNitroSpec::CxxPart::initHybrid(jni::alias_ref<jhybridobject> jThis) {
76
+ return makeCxxInstance(jThis);
79
77
  }
80
78
 
81
- bool JHybridNativeBleNitroSpec::equals(const std::shared_ptr<HybridObject>& other) {
82
- if (auto otherCast = std::dynamic_pointer_cast<JHybridNativeBleNitroSpec>(other)) {
83
- return _javaPart == otherCast->_javaPart;
79
+ std::shared_ptr<JHybridObject> JHybridNativeBleNitroSpec::CxxPart::createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) {
80
+ auto castJavaPart = jni::dynamic_ref_cast<JHybridNativeBleNitroSpec::JavaPart>(javaPart);
81
+ if (castJavaPart == nullptr) [[unlikely]] {
82
+ throw std::runtime_error("Failed to cast JHybridObject::JavaPart to JHybridNativeBleNitroSpec::JavaPart!");
84
83
  }
85
- return false;
86
- }
87
-
88
- void JHybridNativeBleNitroSpec::dispose() noexcept {
89
- static const auto method = javaClassStatic()->getMethod<void()>("dispose");
90
- method(_javaPart);
84
+ return std::make_shared<JHybridNativeBleNitroSpec>(castJavaPart);
91
85
  }
92
86
 
93
- std::string JHybridNativeBleNitroSpec::toString() {
94
- static const auto method = javaClassStatic()->getMethod<jni::JString()>("toString");
95
- auto javaString = method(_javaPart);
96
- return javaString->toStdString();
87
+ void JHybridNativeBleNitroSpec::CxxPart::registerNatives() {
88
+ registerHybrid({
89
+ makeNativeMethod("initHybrid", JHybridNativeBleNitroSpec::CxxPart::initHybrid),
90
+ });
97
91
  }
98
92
 
99
93
  // Properties
100
94
  std::optional<std::string> JHybridNativeBleNitroSpec::getRestoreStateIdentifier() {
101
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getRestoreStateIdentifier");
95
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JString>()>("getRestoreStateIdentifier");
102
96
  auto __result = method(_javaPart);
103
97
  return __result != nullptr ? std::make_optional(__result->toStdString()) : std::nullopt;
104
98
  }
105
99
  void JHybridNativeBleNitroSpec::setRestoreStateIdentifier(const std::optional<std::string>& restoreStateIdentifier) {
106
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* restoreStateIdentifier */)>("setRestoreStateIdentifier");
100
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* restoreStateIdentifier */)>("setRestoreStateIdentifier");
107
101
  method(_javaPart, restoreStateIdentifier.has_value() ? jni::make_jstring(restoreStateIdentifier.value()) : nullptr);
108
102
  }
109
103
 
110
104
  // Methods
111
105
  void JHybridNativeBleNitroSpec::setRestoreStateCallback(const std::function<void(const std::vector<BLEDevice>& /* restoredPeripherals */)>& callback) {
112
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__vector_BLEDevice_::javaobject> /* callback */)>("setRestoreStateCallback_cxx");
106
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_std__vector_BLEDevice_::javaobject> /* callback */)>("setRestoreStateCallback_cxx");
113
107
  method(_javaPart, JFunc_void_std__vector_BLEDevice__cxx::fromCpp(callback));
114
108
  }
115
109
  void JHybridNativeBleNitroSpec::iosLazyInit() {
116
- static const auto method = javaClassStatic()->getMethod<void()>("iosLazyInit");
110
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void()>("iosLazyInit");
117
111
  method(_javaPart);
118
112
  }
119
113
  void JHybridNativeBleNitroSpec::startScan(const ScanFilter& filter, const std::function<void(const std::optional<std::variant<nitro::NullType, BLEDevice>>& /* device */, const std::optional<std::variant<nitro::NullType, std::string>>& /* error */)>& callback) {
120
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JScanFilter> /* filter */, jni::alias_ref<JFunc_void_std__optional_std__variant_nitro__NullType__BLEDevice___std__optional_std__variant_nitro__NullType__std__string__::javaobject> /* callback */)>("startScan_cxx");
114
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JScanFilter> /* filter */, jni::alias_ref<JFunc_void_std__optional_std__variant_nitro__NullType__BLEDevice___std__optional_std__variant_nitro__NullType__std__string__::javaobject> /* callback */)>("startScan_cxx");
121
115
  method(_javaPart, JScanFilter::fromCpp(filter), JFunc_void_std__optional_std__variant_nitro__NullType__BLEDevice___std__optional_std__variant_nitro__NullType__std__string___cxx::fromCpp(callback));
122
116
  }
123
117
  bool JHybridNativeBleNitroSpec::stopScan() {
124
- static const auto method = javaClassStatic()->getMethod<jboolean()>("stopScan");
118
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean()>("stopScan");
125
119
  auto __result = method(_javaPart);
126
120
  return static_cast<bool>(__result);
127
121
  }
128
122
  bool JHybridNativeBleNitroSpec::isScanning() {
129
- static const auto method = javaClassStatic()->getMethod<jboolean()>("isScanning");
123
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean()>("isScanning");
130
124
  auto __result = method(_javaPart);
131
125
  return static_cast<bool>(__result);
132
126
  }
133
127
  std::vector<BLEDevice> JHybridNativeBleNitroSpec::getConnectedDevices(const std::vector<std::string>& services) {
134
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JBLEDevice>>(jni::alias_ref<jni::JArrayClass<jni::JString>> /* services */)>("getConnectedDevices");
128
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<JBLEDevice>>(jni::alias_ref<jni::JArrayClass<jni::JString>> /* services */)>("getConnectedDevices");
135
129
  auto __result = method(_javaPart, [&]() {
136
130
  size_t __size = services.size();
137
131
  jni::local_ref<jni::JArrayClass<jni::JString>> __array = jni::JArrayClass<jni::JString>::newArray(__size);
@@ -154,33 +148,37 @@ namespace margelo::nitro::co::zyke::ble {
154
148
  }();
155
149
  }
156
150
  void JHybridNativeBleNitroSpec::connect(const std::string& deviceId, const std::function<void(bool /* success */, const std::string& /* deviceId */, const std::string& /* error */)>& callback, const std::optional<std::function<void(const std::string& /* deviceId */, bool /* interrupted */, const std::string& /* error */)>>& disconnectCallback, std::optional<bool> autoConnectAndroid) {
157
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<JFunc_void_bool_std__string_std__string::javaobject> /* callback */, jni::alias_ref<JFunc_void_std__string_bool_std__string::javaobject> /* disconnectCallback */, jni::alias_ref<jni::JBoolean> /* autoConnectAndroid */)>("connect_cxx");
151
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<JFunc_void_bool_std__string_std__string::javaobject> /* callback */, jni::alias_ref<JFunc_void_std__string_bool_std__string::javaobject> /* disconnectCallback */, jni::alias_ref<jni::JBoolean> /* autoConnectAndroid */)>("connect_cxx");
158
152
  method(_javaPart, jni::make_jstring(deviceId), JFunc_void_bool_std__string_std__string_cxx::fromCpp(callback), disconnectCallback.has_value() ? JFunc_void_std__string_bool_std__string_cxx::fromCpp(disconnectCallback.value()) : nullptr, autoConnectAndroid.has_value() ? jni::JBoolean::valueOf(autoConnectAndroid.value()) : nullptr);
159
153
  }
160
154
  void JHybridNativeBleNitroSpec::disconnect(const std::string& deviceId, const std::function<void(bool /* success */, const std::string& /* error */)>& callback) {
161
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<JFunc_void_bool_std__string::javaobject> /* callback */)>("disconnect_cxx");
155
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<JFunc_void_bool_std__string::javaobject> /* callback */)>("disconnect_cxx");
162
156
  method(_javaPart, jni::make_jstring(deviceId), JFunc_void_bool_std__string_cxx::fromCpp(callback));
163
157
  }
164
158
  bool JHybridNativeBleNitroSpec::isConnected(const std::string& deviceId) {
165
- static const auto method = javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* deviceId */)>("isConnected");
159
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* deviceId */)>("isConnected");
166
160
  auto __result = method(_javaPart, jni::make_jstring(deviceId));
167
161
  return static_cast<bool>(__result);
168
162
  }
169
163
  double JHybridNativeBleNitroSpec::requestMTU(const std::string& deviceId, double mtu) {
170
- static const auto method = javaClassStatic()->getMethod<double(jni::alias_ref<jni::JString> /* deviceId */, double /* mtu */)>("requestMTU");
164
+ static const auto method = _javaPart->javaClassStatic()->getMethod<double(jni::alias_ref<jni::JString> /* deviceId */, double /* mtu */)>("requestMTU");
171
165
  auto __result = method(_javaPart, jni::make_jstring(deviceId), mtu);
172
166
  return __result;
173
167
  }
174
168
  void JHybridNativeBleNitroSpec::readRSSI(const std::string& deviceId, const std::function<void(bool /* success */, double /* rssi */, const std::string& /* error */)>& callback) {
175
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<JFunc_void_bool_double_std__string::javaobject> /* callback */)>("readRSSI_cxx");
169
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<JFunc_void_bool_double_std__string::javaobject> /* callback */)>("readRSSI_cxx");
176
170
  method(_javaPart, jni::make_jstring(deviceId), JFunc_void_bool_double_std__string_cxx::fromCpp(callback));
177
171
  }
178
172
  void JHybridNativeBleNitroSpec::discoverServices(const std::string& deviceId, const std::function<void(bool /* success */, const std::string& /* error */)>& callback) {
179
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<JFunc_void_bool_std__string::javaobject> /* callback */)>("discoverServices_cxx");
173
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<JFunc_void_bool_std__string::javaobject> /* callback */)>("discoverServices_cxx");
174
+ method(_javaPart, jni::make_jstring(deviceId), JFunc_void_bool_std__string_cxx::fromCpp(callback));
175
+ }
176
+ void JHybridNativeBleNitroSpec::discoverServicesWithCharacteristics(const std::string& deviceId, const std::function<void(bool /* success */, const std::string& /* error */)>& callback) {
177
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<JFunc_void_bool_std__string::javaobject> /* callback */)>("discoverServicesWithCharacteristics_cxx");
180
178
  method(_javaPart, jni::make_jstring(deviceId), JFunc_void_bool_std__string_cxx::fromCpp(callback));
181
179
  }
182
180
  std::vector<std::string> JHybridNativeBleNitroSpec::getServices(const std::string& deviceId) {
183
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<jni::JString>>(jni::alias_ref<jni::JString> /* deviceId */)>("getServices");
181
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<jni::JString>>(jni::alias_ref<jni::JString> /* deviceId */)>("getServices");
184
182
  auto __result = method(_javaPart, jni::make_jstring(deviceId));
185
183
  return [&]() {
186
184
  size_t __size = __result->size();
@@ -194,7 +192,7 @@ namespace margelo::nitro::co::zyke::ble {
194
192
  }();
195
193
  }
196
194
  std::vector<std::string> JHybridNativeBleNitroSpec::getCharacteristics(const std::string& deviceId, const std::string& serviceId) {
197
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<jni::JString>>(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<jni::JString> /* serviceId */)>("getCharacteristics");
195
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<jni::JArrayClass<jni::JString>>(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<jni::JString> /* serviceId */)>("getCharacteristics");
198
196
  auto __result = method(_javaPart, jni::make_jstring(deviceId), jni::make_jstring(serviceId));
199
197
  return [&]() {
200
198
  size_t __size = __result->size();
@@ -208,42 +206,47 @@ namespace margelo::nitro::co::zyke::ble {
208
206
  }();
209
207
  }
210
208
  void JHybridNativeBleNitroSpec::readCharacteristic(const std::string& deviceId, const std::string& serviceId, const std::string& characteristicId, const std::function<void(bool /* success */, const std::shared_ptr<ArrayBuffer>& /* data */, const std::string& /* error */)>& callback) {
211
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<jni::JString> /* serviceId */, jni::alias_ref<jni::JString> /* characteristicId */, jni::alias_ref<JFunc_void_bool_std__shared_ptr_ArrayBuffer__std__string::javaobject> /* callback */)>("readCharacteristic_cxx");
209
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<jni::JString> /* serviceId */, jni::alias_ref<jni::JString> /* characteristicId */, jni::alias_ref<JFunc_void_bool_std__shared_ptr_ArrayBuffer__std__string::javaobject> /* callback */)>("readCharacteristic_cxx");
212
210
  method(_javaPart, jni::make_jstring(deviceId), jni::make_jstring(serviceId), jni::make_jstring(characteristicId), JFunc_void_bool_std__shared_ptr_ArrayBuffer__std__string_cxx::fromCpp(callback));
213
211
  }
214
212
  void JHybridNativeBleNitroSpec::writeCharacteristic(const std::string& deviceId, const std::string& serviceId, const std::string& characteristicId, const std::shared_ptr<ArrayBuffer>& data, bool withResponse, const std::function<void(bool /* success */, const std::shared_ptr<ArrayBuffer>& /* responseData */, const std::string& /* error */)>& callback) {
215
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<jni::JString> /* serviceId */, jni::alias_ref<jni::JString> /* characteristicId */, jni::alias_ref<JArrayBuffer::javaobject> /* data */, jboolean /* withResponse */, jni::alias_ref<JFunc_void_bool_std__shared_ptr_ArrayBuffer__std__string::javaobject> /* callback */)>("writeCharacteristic_cxx");
213
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<jni::JString> /* serviceId */, jni::alias_ref<jni::JString> /* characteristicId */, jni::alias_ref<JArrayBuffer::javaobject> /* data */, jboolean /* withResponse */, jni::alias_ref<JFunc_void_bool_std__shared_ptr_ArrayBuffer__std__string::javaobject> /* callback */)>("writeCharacteristic_cxx");
216
214
  method(_javaPart, jni::make_jstring(deviceId), jni::make_jstring(serviceId), jni::make_jstring(characteristicId), JArrayBuffer::wrap(data), withResponse, JFunc_void_bool_std__shared_ptr_ArrayBuffer__std__string_cxx::fromCpp(callback));
217
215
  }
218
216
  void JHybridNativeBleNitroSpec::subscribeToCharacteristic(const std::string& deviceId, const std::string& serviceId, const std::string& characteristicId, const std::function<void(const std::string& /* characteristicId */, const std::shared_ptr<ArrayBuffer>& /* data */)>& updateCallback, const std::function<void(bool /* success */, const std::string& /* error */)>& completionCallback) {
219
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<jni::JString> /* serviceId */, jni::alias_ref<jni::JString> /* characteristicId */, jni::alias_ref<JFunc_void_std__string_std__shared_ptr_ArrayBuffer_::javaobject> /* updateCallback */, jni::alias_ref<JFunc_void_bool_std__string::javaobject> /* completionCallback */)>("subscribeToCharacteristic_cxx");
217
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<jni::JString> /* serviceId */, jni::alias_ref<jni::JString> /* characteristicId */, jni::alias_ref<JFunc_void_std__string_std__shared_ptr_ArrayBuffer_::javaobject> /* updateCallback */, jni::alias_ref<JFunc_void_bool_std__string::javaobject> /* completionCallback */)>("subscribeToCharacteristic_cxx");
220
218
  method(_javaPart, jni::make_jstring(deviceId), jni::make_jstring(serviceId), jni::make_jstring(characteristicId), JFunc_void_std__string_std__shared_ptr_ArrayBuffer__cxx::fromCpp(updateCallback), JFunc_void_bool_std__string_cxx::fromCpp(completionCallback));
221
219
  }
222
220
  void JHybridNativeBleNitroSpec::unsubscribeFromCharacteristic(const std::string& deviceId, const std::string& serviceId, const std::string& characteristicId, const std::function<void(bool /* success */, const std::string& /* error */)>& callback) {
223
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<jni::JString> /* serviceId */, jni::alias_ref<jni::JString> /* characteristicId */, jni::alias_ref<JFunc_void_bool_std__string::javaobject> /* callback */)>("unsubscribeFromCharacteristic_cxx");
221
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<jni::JString> /* serviceId */, jni::alias_ref<jni::JString> /* characteristicId */, jni::alias_ref<JFunc_void_bool_std__string::javaobject> /* callback */)>("unsubscribeFromCharacteristic_cxx");
224
222
  method(_javaPart, jni::make_jstring(deviceId), jni::make_jstring(serviceId), jni::make_jstring(characteristicId), JFunc_void_bool_std__string_cxx::fromCpp(callback));
225
223
  }
224
+ bool JHybridNativeBleNitroSpec::isSubscribedToCharacteristic(const std::string& deviceId, const std::string& serviceId, const std::string& characteristicId) {
225
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jboolean(jni::alias_ref<jni::JString> /* deviceId */, jni::alias_ref<jni::JString> /* serviceId */, jni::alias_ref<jni::JString> /* characteristicId */)>("isSubscribedToCharacteristic");
226
+ auto __result = method(_javaPart, jni::make_jstring(deviceId), jni::make_jstring(serviceId), jni::make_jstring(characteristicId));
227
+ return static_cast<bool>(__result);
228
+ }
226
229
  void JHybridNativeBleNitroSpec::requestBluetoothEnable(const std::function<void(bool /* success */, const std::string& /* error */)>& callback) {
227
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_bool_std__string::javaobject> /* callback */)>("requestBluetoothEnable_cxx");
230
+ static const auto method = _javaPart->javaClassStatic()->getMethod<void(jni::alias_ref<JFunc_void_bool_std__string::javaobject> /* callback */)>("requestBluetoothEnable_cxx");
228
231
  method(_javaPart, JFunc_void_bool_std__string_cxx::fromCpp(callback));
229
232
  }
230
233
  BLEState JHybridNativeBleNitroSpec::state() {
231
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JBLEState>()>("state");
234
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JBLEState>()>("state");
232
235
  auto __result = method(_javaPart);
233
236
  return __result->toCpp();
234
237
  }
235
238
  OperationResult JHybridNativeBleNitroSpec::subscribeToStateChange(const std::function<void(BLEState /* state */)>& stateCallback) {
236
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JOperationResult>(jni::alias_ref<JFunc_void_BLEState::javaobject> /* stateCallback */)>("subscribeToStateChange_cxx");
239
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JOperationResult>(jni::alias_ref<JFunc_void_BLEState::javaobject> /* stateCallback */)>("subscribeToStateChange_cxx");
237
240
  auto __result = method(_javaPart, JFunc_void_BLEState_cxx::fromCpp(stateCallback));
238
241
  return __result->toCpp();
239
242
  }
240
243
  OperationResult JHybridNativeBleNitroSpec::unsubscribeFromStateChange() {
241
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JOperationResult>()>("unsubscribeFromStateChange");
244
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JOperationResult>()>("unsubscribeFromStateChange");
242
245
  auto __result = method(_javaPart);
243
246
  return __result->toCpp();
244
247
  }
245
248
  std::shared_ptr<Promise<void>> JHybridNativeBleNitroSpec::openSettings() {
246
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("openSettings");
249
+ static const auto method = _javaPart->javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>()>("openSettings");
247
250
  auto __result = method(_javaPart);
248
251
  return [&]() {
249
252
  auto __promise = Promise<void>::create();
@@ -18,34 +18,33 @@ namespace margelo::nitro::co::zyke::ble {
18
18
 
19
19
  using namespace facebook;
20
20
 
21
- class JHybridNativeBleNitroSpec: public jni::HybridClass<JHybridNativeBleNitroSpec, JHybridObject>,
22
- public virtual HybridNativeBleNitroSpec {
21
+ class JHybridNativeBleNitroSpec: public virtual HybridNativeBleNitroSpec, public virtual JHybridObject {
23
22
  public:
24
- static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/co/zyke/ble/HybridNativeBleNitroSpec;";
25
- static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
26
- static void registerNatives();
27
-
28
- protected:
29
- // C++ constructor (called from Java via `initHybrid()`)
30
- explicit JHybridNativeBleNitroSpec(jni::alias_ref<jhybridobject> jThis) :
31
- HybridObject(HybridNativeBleNitroSpec::TAG),
32
- HybridBase(jThis),
33
- _javaPart(jni::make_global(jThis)) {}
23
+ struct JavaPart: public jni::JavaClass<JavaPart, JHybridObject::JavaPart> {
24
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/co/zyke/ble/HybridNativeBleNitroSpec;";
25
+ std::shared_ptr<JHybridNativeBleNitroSpec> getJHybridNativeBleNitroSpec();
26
+ };
27
+ struct CxxPart: public jni::HybridClass<CxxPart, JHybridObject::CxxPart> {
28
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/co/zyke/ble/HybridNativeBleNitroSpec$CxxPart;";
29
+ static jni::local_ref<jhybriddata> initHybrid(jni::alias_ref<jhybridobject> jThis);
30
+ static void registerNatives();
31
+ using HybridBase::HybridBase;
32
+ protected:
33
+ std::shared_ptr<JHybridObject> createHybridObject(const jni::local_ref<JHybridObject::JavaPart>& javaPart) override;
34
+ };
34
35
 
35
36
  public:
37
+ explicit JHybridNativeBleNitroSpec(const jni::local_ref<JHybridNativeBleNitroSpec::JavaPart>& javaPart):
38
+ HybridObject(HybridNativeBleNitroSpec::TAG),
39
+ JHybridObject(javaPart),
40
+ _javaPart(jni::make_global(javaPart)) {}
36
41
  ~JHybridNativeBleNitroSpec() override {
37
42
  // Hermes GC can destroy JS objects on a non-JNI Thread.
38
43
  jni::ThreadScope::WithClassLoader([&] { _javaPart.reset(); });
39
44
  }
40
45
 
41
46
  public:
42
- size_t getExternalMemorySize() noexcept override;
43
- bool equals(const std::shared_ptr<HybridObject>& other) override;
44
- void dispose() noexcept override;
45
- std::string toString() override;
46
-
47
- public:
48
- inline const jni::global_ref<JHybridNativeBleNitroSpec::javaobject>& getJavaPart() const noexcept {
47
+ inline const jni::global_ref<JHybridNativeBleNitroSpec::JavaPart>& getJavaPart() const noexcept {
49
48
  return _javaPart;
50
49
  }
51
50
 
@@ -68,12 +67,14 @@ namespace margelo::nitro::co::zyke::ble {
68
67
  double requestMTU(const std::string& deviceId, double mtu) override;
69
68
  void readRSSI(const std::string& deviceId, const std::function<void(bool /* success */, double /* rssi */, const std::string& /* error */)>& callback) override;
70
69
  void discoverServices(const std::string& deviceId, const std::function<void(bool /* success */, const std::string& /* error */)>& callback) override;
70
+ void discoverServicesWithCharacteristics(const std::string& deviceId, const std::function<void(bool /* success */, const std::string& /* error */)>& callback) override;
71
71
  std::vector<std::string> getServices(const std::string& deviceId) override;
72
72
  std::vector<std::string> getCharacteristics(const std::string& deviceId, const std::string& serviceId) override;
73
73
  void readCharacteristic(const std::string& deviceId, const std::string& serviceId, const std::string& characteristicId, const std::function<void(bool /* success */, const std::shared_ptr<ArrayBuffer>& /* data */, const std::string& /* error */)>& callback) override;
74
74
  void writeCharacteristic(const std::string& deviceId, const std::string& serviceId, const std::string& characteristicId, const std::shared_ptr<ArrayBuffer>& data, bool withResponse, const std::function<void(bool /* success */, const std::shared_ptr<ArrayBuffer>& /* responseData */, const std::string& /* error */)>& callback) override;
75
75
  void subscribeToCharacteristic(const std::string& deviceId, const std::string& serviceId, const std::string& characteristicId, const std::function<void(const std::string& /* characteristicId */, const std::shared_ptr<ArrayBuffer>& /* data */)>& updateCallback, const std::function<void(bool /* success */, const std::string& /* error */)>& completionCallback) override;
76
76
  void unsubscribeFromCharacteristic(const std::string& deviceId, const std::string& serviceId, const std::string& characteristicId, const std::function<void(bool /* success */, const std::string& /* error */)>& callback) override;
77
+ bool isSubscribedToCharacteristic(const std::string& deviceId, const std::string& serviceId, const std::string& characteristicId) override;
77
78
  void requestBluetoothEnable(const std::function<void(bool /* success */, const std::string& /* error */)>& callback) override;
78
79
  BLEState state() override;
79
80
  OperationResult subscribeToStateChange(const std::function<void(BLEState /* state */)>& stateCallback) override;
@@ -81,9 +82,7 @@ namespace margelo::nitro::co::zyke::ble {
81
82
  std::shared_ptr<Promise<void>> openSettings() override;
82
83
 
83
84
  private:
84
- friend HybridBase;
85
- using HybridBase::HybridBase;
86
- jni::global_ref<JHybridNativeBleNitroSpec::javaobject> _javaPart;
85
+ jni::global_ref<JHybridNativeBleNitroSpec::JavaPart> _javaPart;
87
86
  };
88
87
 
89
88
  } // namespace margelo::nitro::co::zyke::ble