summaryrefslogtreecommitdiff
path: root/QuickJS-android
diff options
context:
space:
mode:
authorFlorian Dold <florian@dold.me>2023-02-08 13:59:28 +0100
committerFlorian Dold <florian@dold.me>2023-02-08 13:59:28 +0100
commit610fc7bee3a55b049f906efa109422f46b7126c1 (patch)
tree063d77c31a9e987e48ab63ba2f3d62365a77802c /QuickJS-android
parent1ac5b8ea3a163c63e674614aa5edac70ce0302d8 (diff)
downloadquickjs-tart-610fc7bee3a55b049f906efa109422f46b7126c1.tar.gz
quickjs-tart-610fc7bee3a55b049f906efa109422f46b7126c1.tar.bz2
quickjs-tart-610fc7bee3a55b049f906efa109422f46b7126c1.zip
qtart android: make sure callbacks are rooted so they don't get GCed randomly
Diffstat (limited to 'QuickJS-android')
-rw-r--r--QuickJS-android/qtart/src/main/java/net/taler/qtart/TalerWalletCore.kt35
1 files changed, 24 insertions, 11 deletions
diff --git a/QuickJS-android/qtart/src/main/java/net/taler/qtart/TalerWalletCore.kt b/QuickJS-android/qtart/src/main/java/net/taler/qtart/TalerWalletCore.kt
index 6e0c605..b62014e 100644
--- a/QuickJS-android/qtart/src/main/java/net/taler/qtart/TalerWalletCore.kt
+++ b/QuickJS-android/qtart/src/main/java/net/taler/qtart/TalerWalletCore.kt
@@ -38,23 +38,28 @@ import com.sun.jna.Native
import com.sun.jna.Pointer
class TalerWalletCore {
- private interface TalerNative: Library {
+ private interface TalerNative : Library {
companion object {
val INSTANCE: TalerNative by lazy {
Native.load("talerwalletcore", TalerNative::class.java)
}
}
- interface TALER_WALLET_MessageHandlerFn: Callback {
+ interface TALER_WALLET_MessageHandlerFn : Callback {
fun invoke(handler_p: Pointer, message: String)
}
- interface TALER_LogFn: Callback {
+ interface TALER_LogFn : Callback {
fun invoke(cls: Pointer, stream: Int, msg: String)
}
fun TALER_WALLET_create(): Pointer
- fun TALER_WALLET_set_message_handler(twi: Pointer, handler_f: TALER_WALLET_MessageHandlerFn, handler_p: Pointer)
+ fun TALER_WALLET_set_message_handler(
+ twi: Pointer,
+ handler_f: TALER_WALLET_MessageHandlerFn,
+ handler_p: Pointer
+ )
+
fun TALER_WALLET_send_request(twi: Pointer, request: String): Int
fun TALER_WALLET_run(twi: Pointer): Int
fun TALER_WALLET_join(twi: Pointer)
@@ -63,21 +68,29 @@ class TalerWalletCore {
private val walletInstance: Pointer = TalerNative.INSTANCE.TALER_WALLET_create()
+ private var currentMessageHandler: TalerNative.TALER_WALLET_MessageHandlerFn? = null
+ private var currentLogHandler: TalerNative.TALER_LogFn? = null
+
fun setMessageHandler(handler: (msg: String) -> Unit) {
+ this.currentMessageHandler = object : TalerNative.TALER_WALLET_MessageHandlerFn {
+ override fun invoke(handler_p: Pointer, message: String) {
+ handler(message)
+ }
+ }
TalerNative.INSTANCE.TALER_WALLET_set_message_handler(
- walletInstance, object : TalerNative.TALER_WALLET_MessageHandlerFn {
- override fun invoke(handler_p: Pointer, message: String) {
- handler(message)
- }
- }, walletInstance)
+ walletInstance,
+ this.currentMessageHandler!!,
+ walletInstance
+ )
}
fun setStdoutHandler(handler: (msg: String) -> Unit) {
- TalerNative.INSTANCE.TALER_start_redirect_std(object : TalerNative.TALER_LogFn {
+ this.currentLogHandler = object : TalerNative.TALER_LogFn {
override fun invoke(cls: Pointer, stream: Int, msg: String) {
handler(msg)
}
- }, walletInstance)
+ }
+ TalerNative.INSTANCE.TALER_start_redirect_std(this.currentLogHandler!!, walletInstance)
}
fun sendRequest(request: String) {