Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import io.reactivex.Observable
- import io.reactivex.rxkotlin.Observables
- import io.reactivex.schedulers.Schedulers
- import io.reactivex.subjects.PublishSubject
- val BAD_SESSION_ID = "BAD_SESSION_ID"
- val GOOD_SESSION_ID = "GOOD_SESSION_ID"
- fun main(args: Array<String>) {
- val responseSubject = PublishSubject.create<ErrorCode>()
- responseSubject
- .subscribeOn(Schedulers.trampoline())
- .subscribe({ value ->
- println("value: $value")
- }, { error ->
- println(error.message)
- }, {
- println("onComplete")
- })
- val fileList = listOf("file1", "file2", "file3", "file4")
- val filesObservables = Observable.fromIterable(fileList)
- .subscribeOn(Schedulers.trampoline())
- .flatMap { prepareFile(it) }
- .toList()
- .toObservable()
- .share()
- val requestObservable = Observable.just(Request("test", 0))
- val responseObservable = Observables.zip(filesObservables, requestObservable, { a, b -> Pair(a, b) })
- .flatMap { sendRequest(it.first, it.second, BAD_SESSION_ID) }
- .share()
- responseObservable
- .filter { it == ErrorCode.OK }
- .subscribe(responseSubject)
- val sessionIdObservable = responseObservable
- .filter { it == ErrorCode.BAD_SESSION_ID }
- .flatMap { reLogin() }
- Observables.zip(sessionIdObservable, filesObservables, requestObservable, { a, b, c -> Triple(a, b, c) })
- .flatMap { sendRequest(it.second, it.third, it.first) }
- .subscribe(responseSubject)
- }
- fun prepareFile(file: String): Observable<String> {
- println("prepareFiles")
- return Observable.just(file)
- }
- fun reLogin(): Observable<String> {
- println("reLogin")
- return Observable.just(GOOD_SESSION_ID)
- }
- fun sendRequest(files: MutableList<String>, request: Request, sessionId: String): Observable<ErrorCode> {
- println("sendRequest")
- if (sessionId == BAD_SESSION_ID) {
- return Observable.just(ErrorCode.BAD_SESSION_ID)
- } else {
- return Observable.just(ErrorCode.OK)
- }
- }
- data class Request(val param1: String,
- val param2: Int)
- enum class ErrorCode {
- OK,
- BAD_SESSION_ID
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement