Advertisement
Guest User

Untitled

a guest
Aug 27th, 2017
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.30 KB | None | 0 0
  1. import io.reactivex.Observable
  2. import io.reactivex.rxkotlin.Observables
  3. import io.reactivex.schedulers.Schedulers
  4. import io.reactivex.subjects.PublishSubject
  5.  
  6. val BAD_SESSION_ID = "BAD_SESSION_ID"
  7. val GOOD_SESSION_ID = "GOOD_SESSION_ID"
  8.  
  9. fun main(args: Array<String>) {
  10.     val responseSubject = PublishSubject.create<ErrorCode>()
  11.  
  12.     responseSubject
  13.             .subscribeOn(Schedulers.trampoline())
  14.             .subscribe({ value ->
  15.                 println("value: $value")
  16.             }, { error ->
  17.                 println(error.message)
  18.             }, {
  19.                 println("onComplete")
  20.             })
  21.  
  22.     val fileList = listOf("file1", "file2", "file3", "file4")
  23.     val filesObservables = Observable.fromIterable(fileList)
  24.             .subscribeOn(Schedulers.trampoline())
  25.             .flatMap { prepareFile(it) }
  26.             .toList()
  27.             .toObservable()
  28.             .share()
  29.  
  30.     val requestObservable = Observable.just(Request("test", 0))
  31.  
  32.     val responseObservable = Observables.zip(filesObservables, requestObservable, { a, b -> Pair(a, b) })
  33.             .flatMap { sendRequest(it.first, it.second, BAD_SESSION_ID) }
  34.             .share()
  35.  
  36.     responseObservable
  37.             .filter { it == ErrorCode.OK }
  38.             .subscribe(responseSubject)
  39.  
  40.     val sessionIdObservable = responseObservable
  41.             .filter { it == ErrorCode.BAD_SESSION_ID }
  42.             .flatMap { reLogin() }
  43.  
  44.     Observables.zip(sessionIdObservable, filesObservables, requestObservable, { a, b, c -> Triple(a, b, c) })
  45.             .flatMap { sendRequest(it.second, it.third, it.first) }
  46.             .subscribe(responseSubject)
  47. }
  48.  
  49. fun prepareFile(file: String): Observable<String> {
  50.     println("prepareFiles")
  51.     return Observable.just(file)
  52. }
  53.  
  54. fun reLogin(): Observable<String> {
  55.     println("reLogin")
  56.     return Observable.just(GOOD_SESSION_ID)
  57. }
  58.  
  59. fun sendRequest(files: MutableList<String>, request: Request, sessionId: String): Observable<ErrorCode> {
  60.     println("sendRequest")
  61.  
  62.     if (sessionId == BAD_SESSION_ID) {
  63.         return Observable.just(ErrorCode.BAD_SESSION_ID)
  64.     } else {
  65.         return Observable.just(ErrorCode.OK)
  66.     }
  67. }
  68.  
  69. data class Request(val param1: String,
  70.                    val param2: Int)
  71.  
  72. enum class ErrorCode {
  73.     OK,
  74.     BAD_SESSION_ID
  75. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement