@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.
- package/lib/common/include/ThreadSafeCallback.h +95 -0
- package/lib/mac/binding.gyp +2 -6
- package/lib/mac/bindings.js +2 -3
- package/lib/mac/src/callbacks.mm +2 -1
- package/package.json +1 -2
- package/prebuilds/darwin-x64+arm64/@stoprocent+bleno.node +0 -0
- package/prebuilds/win32-ia32/@stoprocent+bleno.node +0 -0
- package/prebuilds/win32-x64/@stoprocent+bleno.node +0 -0
|
@@ -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
|
+
}
|
package/lib/mac/binding.gyp
CHANGED
|
@@ -6,15 +6,11 @@
|
|
|
6
6
|
{
|
|
7
7
|
'target_name': 'binding',
|
|
8
8
|
'sources': [
|
|
9
|
-
'src
|
|
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
|
-
"
|
|
13
|
+
"../common/include"
|
|
18
14
|
],
|
|
19
15
|
'cflags!': [ '-fno-exceptions' ],
|
|
20
16
|
'cflags_cc!': [ '-fno-exceptions' ],
|
package/lib/mac/bindings.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
const
|
|
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
|
-
|
|
9
|
+
Object.setPrototypeOf(BlenoMac.prototype, EventEmitter.prototype);
|
|
11
10
|
|
|
12
11
|
module.exports = BlenoMac;
|
package/lib/mac/src/callbacks.mm
CHANGED
|
@@ -4,10 +4,11 @@
|
|
|
4
4
|
//
|
|
5
5
|
// Created by Georg Vienna on 30.08.18.
|
|
6
6
|
//
|
|
7
|
-
|
|
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.
|
|
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
|
},
|
|
Binary file
|
|
Binary file
|
|
Binary file
|