Created
April 18, 2017 14:08
-
-
Save aem/b9412d4e929eae68afa3851d4d4e0002 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@Singleton | |
class ReactEventDispatcher @Inject constructor(val reactInstanceManager: ReactInstanceManager) { | |
private val callResults = PublishSubject<ReadableMap>() | |
private var currentKey: Long = 0L | |
private fun nextKey(): Long { | |
currentKey += 1 | |
return currentKey | |
} | |
fun route(callResult: ReadableMap) { | |
callResults.onNext(callResult) | |
} | |
fun resultObservable(key: Long): Observable<ReadableMap> { | |
return callResults.filter { it.getString("key").toLong() == key } | |
} | |
fun dispatchEvent(event: String, data: WritableMap): Observable<ReadableMap> { | |
val key = nextKey() | |
val eventData = WritableNativeMap() | |
eventData.putString("key", key.toString()) | |
eventData.putMap("data", data) | |
reactInstanceManager.currentReactContext | |
?.getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter::class.java) | |
?.emit(event, eventData) | |
return resultObservable(key) | |
.serialize() | |
.observeOn(AndroidSchedulers.mainThread()) | |
.map { it.getMap("data") } | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment