Skip to content

Instantly share code, notes, and snippets.

@aem
Created April 18, 2017 14:08
Show Gist options
  • Save aem/b9412d4e929eae68afa3851d4d4e0002 to your computer and use it in GitHub Desktop.
Save aem/b9412d4e929eae68afa3851d4d4e0002 to your computer and use it in GitHub Desktop.
@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