Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- enum StateEnum {
- INIT, IN_PROGRESS, COMPLETE, ERROR
- }
- class EmailSender {
- // interface
- fun send(email : Email) : EmailSendingProgress
- fun cancel(emailSendingProgress: EmailSendingProgress)
- val senderState : BehaviorRelay<EmailSendingProgress> // relay, cannot be closed
- // impl
- private val senderScopedDisposable = CompositeDisposable()
- fun send(email : Email) : EmailSendingProgress {
- val newProgressSubject = BehaviorSubject.default<StateEnum>(StateEnum.INIT)
- senderScopedDisposable += emailApi.send(...) // .send je Single/Completable
- .toObservable()
- .map { StateEnum.COMPLETE }
- .onErrorReturnItem(StateEnum.ERROR)
- .onStart(StateEnum.IN_PROGRESS)
- .doOnComplete { newProgressSubject.onComplete() }
- .subscribe { newProgressSubject.onNext(it) }
- val newProgress = EmailSendingProgress(newProgressSubject)
- senderState.accept(newProgress)
- return newProgress
- }
- // retry by som asi implementoval vytvorenim noveho sendu s rovnakym payloadom + ?id?
- }
- class EmailSendingProgress(val progress : Observable<StateEnum>)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement