@stoprocent/bleno 0.9.0 → 0.10.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.
@@ -0,0 +1,95 @@
1
+ #pragma once
2
+
3
+ #include <napi.h>
4
+ #include <vector>
5
+ #include <functional>
6
+
7
+ class ThreadSafeCallback {
8
+ public:
9
+ // More descriptive type aliases
10
+ using ArgumentVector = std::vector<napi_value>;
11
+ using ArgumentFunction = std::function<void(napi_env, ArgumentVector&)>;
12
+
13
+ // Constructor with validation
14
+ ThreadSafeCallback(const Napi::Value& receiver, const Napi::Function& jsCallback);
15
+
16
+ // Destructor
17
+ ~ThreadSafeCallback();
18
+
19
+ // Delete copy and move operations explicitly
20
+ ThreadSafeCallback(const ThreadSafeCallback&) = delete;
21
+ ThreadSafeCallback& operator=(const ThreadSafeCallback&) = delete;
22
+ ThreadSafeCallback& operator=(ThreadSafeCallback&&) = delete;
23
+
24
+ // Public interface
25
+ void call(ArgumentFunction argFunction);
26
+
27
+ private:
28
+ // Static callback handler
29
+ static void callJsCallback(Napi::Env env,
30
+ Napi::Function jsCallback,
31
+ Napi::Reference<Napi::Value>* context,
32
+ ArgumentFunction* argFn);
33
+
34
+ // Type alias for the thread-safe function
35
+ using ThreadSafeFunc = Napi::TypedThreadSafeFunction<
36
+ Napi::Reference<Napi::Value>,
37
+ ArgumentFunction,
38
+ callJsCallback>;
39
+
40
+ // Member variables
41
+ Napi::Reference<Napi::Value> receiver_;
42
+ ThreadSafeFunc threadSafeFunction_;
43
+ };
44
+
45
+ // Implementation
46
+
47
+ inline ThreadSafeCallback::ThreadSafeCallback(
48
+ const Napi::Value& receiver,
49
+ const Napi::Function& jsCallback) {
50
+
51
+ if (!(receiver.IsObject() || receiver.IsFunction())) {
52
+ throw Napi::Error::New(jsCallback.Env(),
53
+ "Callback receiver must be an object or function");
54
+ }
55
+ if (!jsCallback.IsFunction()) {
56
+ throw Napi::Error::New(jsCallback.Env(),
57
+ "Callback must be a function");
58
+ }
59
+
60
+ receiver_ = Napi::Persistent(receiver);
61
+ threadSafeFunction_ = ThreadSafeFunc::New(
62
+ jsCallback.Env(),
63
+ jsCallback,
64
+ "ThreadSafeCallback callback",
65
+ 0, 1,
66
+ &receiver_);
67
+ }
68
+
69
+ inline ThreadSafeCallback::~ThreadSafeCallback() {
70
+ threadSafeFunction_.Abort();
71
+ }
72
+
73
+ inline void ThreadSafeCallback::call(ArgumentFunction argFunction) {
74
+ auto argFn = new ArgumentFunction(argFunction);
75
+ if (threadSafeFunction_.BlockingCall(argFn) != napi_ok) {
76
+ delete argFn;
77
+ }
78
+ }
79
+
80
+ inline void ThreadSafeCallback::callJsCallback(
81
+ Napi::Env env,
82
+ Napi::Function jsCallback,
83
+ Napi::Reference<Napi::Value>* context,
84
+ ArgumentFunction* argFn) {
85
+
86
+ if (argFn != nullptr) {
87
+ ArgumentVector args;
88
+ (*argFn)(env, args);
89
+ delete argFn;
90
+
91
+ if (env != nullptr && jsCallback != nullptr) {
92
+ jsCallback.Call(context->Value(), args);
93
+ }
94
+ }
95
+ }
@@ -6,15 +6,11 @@
6
6
  {
7
7
  'target_name': 'binding',
8
8
  'sources': [
9
- 'src/bleno_mac.mm',
10
- 'src/napi_objc.mm',
11
- 'src/ble_peripheral_manager.mm',
12
- 'src/objc_cpp.mm',
13
- 'src/callbacks.mm'
9
+ "<!@(node -p \"require('fs').readdirSync('src').filter(f=>new RegExp('.*\\\\.(c|cc|cpp|mm)$').test(f)).map(f=>'src/'+f).join(' ')\")",
14
10
  ],
15
11
  'include_dirs': [
16
12
  "<!(node -p \"require('node-addon-api').include_dir\")",
17
- "<!@(node -p \"require('napi-thread-safe-callback').include\")"
13
+ "../common/include"
18
14
  ],
19
15
  'cflags!': [ '-fno-exceptions' ],
20
16
  'cflags_cc!': [ '-fno-exceptions' ],
@@ -1,5 +1,4 @@
1
- const events = require('events');
2
- const util = require('util');
1
+ const { EventEmitter } = require('events');
3
2
 
4
3
  const { resolve } = require('path');
5
4
  const dir = resolve(__dirname, '..', '..');
@@ -7,6 +6,6 @@ const binding = require('node-gyp-build')(dir);
7
6
 
8
7
  const { BlenoMac } = binding;
9
8
 
10
- util.inherits(BlenoMac, events.EventEmitter);
9
+ Object.setPrototypeOf(BlenoMac.prototype, EventEmitter.prototype);
11
10
 
12
11
  module.exports = BlenoMac;
@@ -4,10 +4,11 @@
4
4
  //
5
5
  // Created by Georg Vienna on 30.08.18.
6
6
  //
7
- #include <napi-thread-safe-callback.hpp>
7
+
8
8
  #include "callbacks.h"
9
9
  #include "napi_objc.h"
10
10
  #include "objc_cpp.h"
11
+ #include "ThreadSafeCallback.h"
11
12
 
12
13
  #define _a(val) Napi::String::New(env, convertToBlenoAddress(val))
13
14
  #define _s(val) Napi::String::New(env, val)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stoprocent/bleno",
3
- "version": "0.9.0",
3
+ "version": "0.10.0",
4
4
  "description": "A Node.js module for implementing BLE (Bluetooth Low Energy) peripherals",
5
5
  "main": "./index.js",
6
6
  "types": "./index.d.ts",
@@ -65,7 +65,6 @@
65
65
  },
66
66
  "dependencies": {
67
67
  "debug": "^4.4.0",
68
- "napi-thread-safe-callback": "^0.0.6",
69
68
  "node-addon-api": "^8.3.1",
70
69
  "node-gyp-build": "^4.8.4"
71
70
  },