Skip to content

Commit 434a4e9

Browse files
authored
Merge pull request #73 from jerson/debug-fix
Debug fix
2 parents 4a15791 + 85bf233 commit 434a4e9

File tree

7 files changed

+849
-744
lines changed

7 files changed

+849
-744
lines changed

android/fast-openpgp-adapter.cpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -51,33 +51,33 @@ extern "C"
5151
JNIEXPORT jbyteArray JNICALL
5252
Java_com_reactnativefastopenpgp_FastOpenpgpModule_callJSI(JNIEnv *env, jobject thiz, jlong jsi_ptr,
5353
jstring name, jbyteArray payload) {
54-
auto runtime = reinterpret_cast<jsi::Runtime *>(jsi_ptr);
54+
auto &runtime = *reinterpret_cast<jsi::Runtime *>(jsi_ptr);
5555
auto nameConstChar = env->GetStringUTFChars(name, nullptr);
5656
auto payloadBytes = env->GetByteArrayElements(payload, nullptr);
5757
auto size = env->GetArrayLength(payload);
5858

59-
auto nameValue = jsi::String::createFromAscii(*runtime, nameConstChar);
59+
auto nameValue = jsi::String::createFromAscii(runtime, nameConstChar);
6060
env->ReleaseStringUTFChars(name, nameConstChar);
6161

6262

63-
auto arrayBuffer = runtime->global().getPropertyAsFunction(*runtime, "ArrayBuffer");
64-
jsi::Object o = arrayBuffer.callAsConstructor(*runtime, size).getObject(*runtime);
65-
jsi::ArrayBuffer payloadValue = o.getArrayBuffer(*runtime);
66-
memcpy(payloadValue.data(*runtime), payloadBytes, size);
63+
auto arrayBuffer = runtime.global().getPropertyAsFunction(runtime, "ArrayBuffer");
64+
jsi::Object o = arrayBuffer.callAsConstructor(runtime, size).getObject(runtime);
65+
jsi::ArrayBuffer payloadValue = o.getArrayBuffer(runtime);
66+
memcpy(payloadValue.data(runtime), payloadBytes, size);
6767
env->ReleaseByteArrayElements(payload, payloadBytes, 0);
6868

69-
auto response = fastOpenPGP::call(*runtime, nameValue, payloadValue);
69+
auto response = fastOpenPGP::call(runtime, nameValue, payloadValue);
7070

7171
if (response.isString()) {
72-
auto error = response.asString(*runtime);
72+
auto error = response.asString(runtime);
7373
jclass Exception = env->FindClass("java/lang/Exception");
74-
env->ThrowNew(Exception, error.utf8(*runtime).c_str());
74+
env->ThrowNew(Exception, error.utf8(runtime).c_str());
7575
return nullptr;
7676

7777
}
78-
auto byteResult = response.asObject(*runtime).getArrayBuffer(*runtime);
79-
auto sizeResult = byteResult.size(*runtime);
78+
auto byteResult = response.asObject(runtime).getArrayBuffer(runtime);
79+
auto sizeResult = byteResult.size(runtime);
8080
auto result = env->NewByteArray(sizeResult);
81-
env->SetByteArrayRegion(result, 0, sizeResult, (jbyte*) byteResult.data(*runtime));
81+
env->SetByteArrayRegion(result, 0, sizeResult, (jbyte*) byteResult.data(runtime));
8282
return result;
8383
}
Lines changed: 70 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,15 @@
11
package com.reactnativefastopenpgp
22

3+
import android.util.Log
34
import androidx.annotation.NonNull
45
import com.facebook.react.bridge.*
56

67
@ExperimentalUnsignedTypes
78
internal class FastOpenpgpModule(reactContext: ReactApplicationContext) :
89
ReactContextBaseJavaModule(reactContext) {
910

11+
val TAG = "[FastRsaModule]"
12+
1013
external fun initialize(jsiPtr: Long);
1114
external fun destruct();
1215
external fun callJSI(jsiPtr: Long, name: String, payload: ByteArray): ByteArray;
@@ -18,56 +21,75 @@ internal class FastOpenpgpModule(reactContext: ReactApplicationContext) :
1821
}
1922
}
2023

21-
@ReactMethod
22-
fun callJSI(name: String, payload: ReadableArray, promise: Promise) {
23-
Thread {
24-
try {
25-
val bytes = ByteArray(payload.size()) { pos -> payload.getInt(pos).toByte() }
26-
var result =
27-
callJSI(this.reactApplicationContext.javaScriptContextHolder.get(), name, bytes)
28-
val resultList = Arguments.createArray()
29-
for (i in result.indices) {
30-
resultList.pushInt(result[i].toInt())
31-
}
32-
result = ByteArray(0);
33-
promise.resolve(resultList)
34-
} catch (e: Exception) {
35-
promise.reject(e)
36-
}
37-
}.start()
38-
}
39-
40-
@ReactMethod
41-
fun call(name: String, payload: ReadableArray, promise: Promise) {
42-
Thread {
43-
try {
44-
val bytes = ByteArray(payload.size()) { pos -> payload.getInt(pos).toByte() }
45-
var result = callNative(name, bytes)
46-
val resultList = Arguments.createArray()
47-
for (i in result.indices) {
48-
resultList.pushInt(result[i].toInt())
49-
}
50-
result = ByteArray(0);
51-
promise.resolve(resultList)
52-
} catch (e: Exception) {
53-
promise.reject(e)
54-
}
55-
}.start()
56-
}
24+
@ReactMethod
25+
fun callJSI(name: String, payload: ReadableArray, promise: Promise) {
26+
Thread {
27+
reactApplicationContext.runOnJSQueueThread {
28+
try {
29+
val contextHolder = this.reactApplicationContext.javaScriptContextHolder.get()
30+
if (contextHolder.toInt() == 0) {
31+
call(name, payload, promise)
32+
return@runOnJSQueueThread
33+
}
34+
val bytes = ByteArray(payload.size()) { pos -> payload.getInt(pos).toByte() }
35+
val result = callJSI(contextHolder, name, bytes)
36+
val resultList = Arguments.createArray()
37+
for (i in result.indices) {
38+
resultList.pushInt(result[i].toInt())
39+
}
40+
promise.resolve(resultList)
41+
} catch (e: Exception) {
42+
promise.reject(e)
43+
}
44+
}
45+
}.start()
46+
}
5747

58-
@NonNull
59-
override fun getName(): String {
60-
return "FastOpenPGP"
61-
}
48+
@ReactMethod
49+
fun call(name: String, payload: ReadableArray, promise: Promise) {
50+
Thread {
51+
try {
52+
val bytes = ByteArray(payload.size()) { pos -> payload.getInt(pos).toByte() }
53+
val result = callNative(name, bytes)
54+
val resultList = Arguments.createArray()
55+
for (i in result.indices) {
56+
resultList.pushInt(result[i].toInt())
57+
}
58+
promise.resolve(resultList)
59+
} catch (e: Exception) {
60+
promise.reject(e)
61+
}
62+
}.start()
63+
}
6264

63-
override fun initialize() {
64-
super.initialize()
65-
reactApplicationContext.runOnJSQueueThread {
66-
initialize(this.reactApplicationContext.javaScriptContextHolder.get())
65+
@ReactMethod()
66+
fun install(promise: Promise) {
67+
Thread {
68+
reactApplicationContext.runOnJSQueueThread {
69+
Log.d(TAG, "installing")
70+
try {
71+
val contextHolder = this.reactApplicationContext.javaScriptContextHolder.get()
72+
if (contextHolder.toInt() == 0) {
73+
promise.resolve(false)
74+
return@runOnJSQueueThread
75+
}
76+
initialize(contextHolder)
77+
Log.i(TAG, "successfully installed")
78+
promise.resolve(true)
79+
} catch (exception: java.lang.Exception) {
80+
Log.e(TAG, "failed to install JSI", exception)
81+
promise.reject(exception)
6782
}
68-
}
83+
}
84+
}.start()
85+
}
6986

70-
override fun onCatalystInstanceDestroy() {
71-
destruct();
72-
}
87+
override fun getName(): String {
88+
return "FastOpenPGP"
89+
}
90+
91+
override fun onCatalystInstanceDestroy() {
92+
destruct();
93+
}
7394
}
95+

example/ios/Podfile.lock

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -272,7 +272,7 @@ PODS:
272272
- React-jsinspector (0.66.0)
273273
- React-logger (0.66.0):
274274
- glog
275-
- react-native-fast-openpgp (2.3.1):
275+
- react-native-fast-openpgp (2.4.3):
276276
- React-Core
277277
- React-perflogger (0.66.0)
278278
- React-RCTActionSheet (0.66.0):
@@ -516,7 +516,7 @@ SPEC CHECKSUMS:
516516
React-jsiexecutor: 6a05173dc0142abc582bd4edd2d23146b8cc218a
517517
React-jsinspector: be95ad424ba9f7b817aff22732eb9b1b810a000a
518518
React-logger: 9a9cd87d4ea681ae929b32ef580638ff1b50fb24
519-
react-native-fast-openpgp: a40ce90d07b7aaa1a57df22ae0b1729fba5aa649
519+
react-native-fast-openpgp: 3c3188b7664526266651446c0420f99aad3e8f0a
520520
React-perflogger: 1f554c2b684e2f484f9edcdfdaeedab039fbaca8
521521
React-RCTActionSheet: 610d5a5d71ab4808734782c8bca6a12ec3563672
522522
React-RCTAnimation: ec6ed97370ace32724c253f29f0586cafcab8126

ios/FastOpenPGP.mm

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,12 @@ @implementation FastOpenPGP
5151
withResolver:(RCTPromiseResolveBlock)resolve
5252
withReject:(RCTPromiseRejectBlock)reject)
5353
{
54+
RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge;
55+
if (!cxxBridge.runtime) {
56+
[self call:name withPayload:payload withResolver:resolve withReject:reject];
57+
return;
58+
}
59+
5460
auto bytesCopy = (Byte*)malloc(payload.count);
5561
[payload enumerateObjectsUsingBlock:^(NSNumber* number, NSUInteger index, BOOL* stop){
5662
bytesCopy[index] = number.integerValue;
@@ -59,11 +65,6 @@ @implementation FastOpenPGP
5965
int size = (int) payload.count;
6066

6167

62-
RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge;
63-
if (!cxxBridge.runtime) {
64-
reject(@"E001",@"bridge not found",nil);
65-
return;
66-
}
6768
jsi::Runtime * runtime = (jsi::Runtime *)cxxBridge.runtime;
6869

6970
auto nameValue = jsi::String::createFromAscii(*runtime, cname);
@@ -97,6 +98,22 @@ @implementation FastOpenPGP
9798
resolve(result);
9899
}
99100

101+
RCT_REMAP_METHOD(install,installWithResolver:(RCTPromiseResolveBlock)resolve
102+
withReject:(RCTPromiseRejectBlock)reject)
103+
{
104+
RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge;
105+
if (!cxxBridge.runtime) {
106+
NSNumber * val = [NSNumber numberWithBool:NO];
107+
resolve(val);
108+
return;
109+
}
110+
jsi::Runtime * runtime = (jsi::Runtime *)cxxBridge.runtime;
111+
112+
fastOpenPGP::install(*runtime);
113+
NSNumber * val = [NSNumber numberWithBool:TRUE];
114+
resolve(val);
115+
}
116+
100117
+ (BOOL)requiresMainQueueSetup {
101118
return YES;
102119
}
@@ -105,15 +122,6 @@ - (void)setBridge:(RCTBridge *)bridge
105122
{
106123
_bridge = bridge;
107124
_setBridgeOnMainQueue = RCTIsMainQueue();
108-
109-
RCTCxxBridge *cxxBridge = (RCTCxxBridge *)self.bridge;
110-
if (!cxxBridge.runtime) {
111-
return;
112-
}
113-
jsi::Runtime * runtime = (jsi::Runtime *)cxxBridge.runtime;
114-
115-
fastOpenPGP::install(*runtime);
116-
117125
}
118126

119127
- (void)invalidate {

0 commit comments

Comments
 (0)