Advertisement
Guest User

Untitled

a guest
Aug 28th, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 2.20 KB | None | 0 0
  1.  
  2. import io.reactivex.Observable
  3. import io.reactivex.rxkotlin.Observables
  4. import io.reactivex.schedulers.Schedulers
  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.  
  11.     val fileList = listOf("file1", "file2", "file3", "file4")
  12.     val filesObservables = Observable.fromIterable(fileList)
  13.             .flatMap { prepareFile(it) }
  14.             .toList()
  15.             .toObservable()
  16.             .publish()
  17.             .autoConnect(2)
  18.  
  19.     val requestSingle = Observable.just(Request())
  20.  
  21.     val responseObservable = Observables.zip(filesObservables, requestSingle, { a, b -> Pair(a, b) })
  22.             .flatMap { sendRequest(it.first, it.second, BAD_SESSION_ID) }
  23.             .publish()
  24.             .autoConnect(2)
  25.  
  26.     val requestFirstAttempt = responseObservable
  27.             .filter { it == ErrorCode.OK }
  28.  
  29.     val sessionIdSingle = responseObservable
  30.             .filter { it == ErrorCode.BAD_SESSION_ID }
  31.             .flatMap { reLogin() }
  32.  
  33.     val requestSecondAttempt = Observables.zip(sessionIdSingle, filesObservables, requestSingle, { a, b, c -> Triple(a, b, c) })
  34.             .flatMap { sendRequest(it.second, it.third, it.first) }
  35.  
  36.     Observable.merge(requestFirstAttempt, requestSecondAttempt)
  37.             .subscribeOn(Schedulers.trampoline())
  38.             .first(ErrorCode.UNKNOWN_ERROR)
  39.             .subscribe({ value ->
  40.                 println("errorCode = $value")
  41.             }, { error ->
  42.                 error.printStackTrace()
  43.             })
  44. }
  45.  
  46. fun prepareFile(file: String): Observable<String> {
  47.     println("prepareFile")
  48.     return Observable.just(file)
  49. }
  50.  
  51. fun reLogin(): Observable<String> {
  52.     println("reLogin")
  53.     return Observable.just(GOOD_SESSION_ID)
  54. }
  55.  
  56. fun sendRequest(files: MutableList<String>, request: Request, sessionId: String): Observable<ErrorCode> {
  57.     return if (sessionId == BAD_SESSION_ID) {
  58.         println("sendRequest BAD_SESSION_ID")
  59.         Observable.just(ErrorCode.BAD_SESSION_ID)
  60.     } else {
  61.         println("sendRequest GOOD_SESSION_ID")
  62.         Observable.just(ErrorCode.OK)
  63.     }
  64. }
  65.  
  66. class Request
  67.  
  68. enum class ErrorCode {
  69.     OK,
  70.     BAD_SESSION_ID,
  71.     UNKNOWN_ERROR
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement