Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Kotlin 1.35 KB | None | 0 0
  1. enum StateEnum {
  2.     INIT, IN_PROGRESS, COMPLETE, ERROR
  3. }
  4.  
  5. class EmailSender {
  6.     // interface
  7.     fun send(email : Email) : EmailSendingProgress
  8.     fun cancel(emailSendingProgress: EmailSendingProgress)
  9.     val senderState : BehaviorRelay<EmailSendingProgress> // relay, cannot be closed
  10.  
  11.     // impl
  12.     private val senderScopedDisposable = CompositeDisposable()
  13.  
  14.     fun send(email : Email) : EmailSendingProgress {
  15.         val newProgressSubject = BehaviorSubject.default<StateEnum>(StateEnum.INIT)
  16.        
  17.         senderScopedDisposable += emailApi.send(...) // .send je Single/Completable
  18.                                         .toObservable()
  19.                                         .map { StateEnum.COMPLETE }
  20.                                         .onErrorReturnItem(StateEnum.ERROR)
  21.                                         .onStart(StateEnum.IN_PROGRESS)
  22.                                         .doOnComplete { newProgressSubject.onComplete() }
  23.                                         .subscribe { newProgressSubject.onNext(it) }
  24.  
  25.         val newProgress = EmailSendingProgress(newProgressSubject)
  26.         senderState.accept(newProgress)
  27.  
  28.         return newProgress
  29.     }
  30.  
  31.     // retry by som asi implementoval vytvorenim noveho sendu s rovnakym payloadom + ?id?
  32. }
  33.  
  34. class EmailSendingProgress(val progress : Observable<StateEnum>)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement