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