@startuml

scale 1.2

hide footbox

!pragma teoz true

skinparam monochrome true
skinparam defaultFontName Source Sans Pro
skinparam sequenceMessageAlign center
skinparam participantBackgroundColor #white
skinparam noteBackgroundColor #white
skinparam sequenceGroupBackgroundColor #white

participant Publisher
participant Subscription
participant Subscriber

Subscriber -> Publisher : subscribe(Subscriber)
Publisher -> Subscription : new Subscription()
Publisher -> Subscriber : onSubscribe(Subscription)

loop until completed
    alt continue
        Subscriber -> Subscription : request(long)
        Subscription -> Publisher
    else cancel
        Subscriber -> Subscription : cancel()
        Subscription -> Publisher
    end

    alt success
        Publisher -> Subscriber : onNext(T)
    else error
        Publisher -> Subscriber : onError(Throwable)
    end
end

Publisher -> Subscriber : onComplete()

@enduml
