1 // Copyright 2015-present 650 Industries. All rights reserved.
2 package host.exp.exponent.kernel
3 
4 import com.facebook.react.bridge.ReactApplicationContext
5 import com.facebook.react.bridge.ReadableMap
6 import com.facebook.react.bridge.WritableMap
7 import java.util.*
8 
9 object ExponentKernelModuleProvider {
10   private var factory: ExponentKernelModuleFactory = object : ExponentKernelModuleFactory {
createnull11     override fun create(reactContext: ReactApplicationContext): ExponentKernelModuleInterface {
12       return ExpoViewKernelModule(reactContext)
13     }
14   }
15 
16   private var instance: ExponentKernelModuleInterface? = null
17 
setFactorynull18   @JvmStatic fun setFactory(factory: ExponentKernelModuleFactory) {
19     this.factory = factory
20   }
21 
newInstancenull22   @JvmStatic fun newInstance(reactContext: ReactApplicationContext): ExponentKernelModuleInterface? {
23     instance = factory.create(reactContext)
24     return instance
25   }
26 
27   @JvmStatic var eventQueue: Queue<KernelEvent> = LinkedList()
queueEventnull28   fun queueEvent(name: String, data: WritableMap, callback: KernelEventCallback) {
29     queueEvent(KernelEvent(name, data, callback))
30   }
31 
queueEventnull32   fun queueEvent(event: KernelEvent) {
33     eventQueue.add(event)
34     instance?.consumeEventQueue()
35   }
36 
37   interface KernelEventCallback {
onEventSuccessnull38     fun onEventSuccess(result: ReadableMap)
39     fun onEventFailure(errorMessage: String?)
40   }
41 
42   interface ExponentKernelModuleFactory {
43     fun create(reactContext: ReactApplicationContext): ExponentKernelModuleInterface
44   }
45 
46   data class KernelEvent(val name: String, val data: WritableMap, val callback: KernelEventCallback)
47 }
48