Packages

p

monix.reactive

observers

package observers

Ordering
  1. Alphabetic
Visibility
  1. Public
  2. All

Type Members

  1. trait BufferedSubscriber[-A] extends Subscriber[A]

    Interface describing Observer wrappers that are thread-safe (can receive concurrent events) and that return an immediate Continue when receiving onNext events.

    Interface describing Observer wrappers that are thread-safe (can receive concurrent events) and that return an immediate Continue when receiving onNext events. Meant to be used by data sources that cannot uphold the no-concurrent events and the back-pressure related requirements (i.e. data-sources that cannot wait on Future[Ack] for sending the next event).

    Implementations of this interface have the following contract:

    • onNext / onError / onComplete of this interface MAY be called concurrently
    • onNext SHOULD return an immediate Continue, as long as the buffer is not full and the underlying observer hasn't signaled Stop (N.B. due to the asynchronous nature, Stop signaled by the underlying observer may be noticed later, so implementations of this interface make no guarantee about queued events - which could be generated, queued and dropped on the floor later)
    • onNext MUST return an immediate Stop result, after it notices that the underlying observer signaled Stop (due to the asynchronous nature of observers, this may happen later and queued events might get dropped on the floor)
    • in general the contract for the underlying Observer is fully respected (grammar, non-concurrent notifications, etc...)
    • when the underlying observer canceled (by returning Stop), or when a concurrent upstream data source triggered an error, this SHOULD eventually be noticed and acted upon
    • as long as the buffer isn't full and the underlying observer isn't Stop, then implementations of this interface SHOULD not lose events in the process
    • the buffer MAY BE either unbounded or bounded, in case of bounded buffers, then an appropriate overflowStrategy needs to be set for when the buffer overflows - either an onError triggered in the underlying observer coupled with a Stop signaled to the upstream data sources, or dropping events from the head or the tail of the queue, or attempting to apply back-pressure, etc...

    See OverflowStrategy for the buffer policies available.

  2. final class CacheUntilConnectSubscriber[-A] extends Subscriber[A]

    Wraps an underlying Subscriber into an implementation that caches all events until the call to connect() happens.

    Wraps an underlying Subscriber into an implementation that caches all events until the call to connect() happens. After being connected, the buffer is drained into the underlying observer, after which all subsequent events are pushed directly.

  3. final class ConnectableSubscriber[-A] extends Subscriber[A]

    Wraps a Subscriber into an implementation that abstains from emitting items until the call to connect() happens.

    Wraps a Subscriber into an implementation that abstains from emitting items until the call to connect() happens. Prior to connect() you can enqueue events for delivery once connect() happens, but before any items emitted by onNext / onComplete and onError.

    Example:

    import monix.execution.Ack.Continue
    import monix.execution.Scheduler.Implicits.global
    
    val subscriber = new Subscriber[String] {
      val scheduler = global
      def onNext(a: String) = {
        println(s"Received: $$a")
        Continue
      }
      def onError(e: Throwable) =
        e.printStackTrace()
      def onComplete() =
        println("Completed!")
    }
    
    val out = ConnectableSubscriber(subscriber)
    
    // schedule onNext event, after connect()
    out.onNext("c")
    
    // schedule event "a" to be emitted first
    out.pushFirst("a")
    // schedule event "b" to be emitted second
    out.pushFirst("b")
    
    // underlying observer now gets events "a", "b", "c" in order
    out.connect()

    Example of an observer ended in error:

    val out2 = ConnectableSubscriber(subscriber)
    
    // schedule onNext event, after connect()
    out2.onNext("c")
    
    out2.pushFirst("a") // event "a" to be emitted first
    out2.pushFirst("b") // event "b" to be emitted second
    
    // schedule an onError sent downstream, once connect()
    // happens, but after "a" and "b"
    out2.pushError(new RuntimeException())
    
    // underlying observer receives ...
    // onNext("a") -> onNext("b") -> onError(RuntimeException)
    out2.connect()
    
    // NOTE: that onNext("c") never happens
  4. final class SafeSubscriber[-A] extends Subscriber[A]

    A safe subscriber safe guards subscriber implementations, such that:

    A safe subscriber safe guards subscriber implementations, such that:

    • the onComplete and onError signals are back-pressured
    • errors triggered by downstream observers are caught and logged, while the upstream gets an Ack.Stop, to stop sending events
    • once an onError or onComplete was emitted, the observer no longer accepts onNext events, ensuring that the grammar is respected
    • if downstream signals a Stop, the observer no longer accepts any events, ensuring that the grammar is respected
  5. trait Subscriber[-A] extends Observer[A]

    A Subscriber is an Observer with an attached Scheduler.

    A Subscriber is an Observer with an attached Scheduler.

    A Subscriber can be seen as an address that the data source needs in order to send events, along with an execution context.

Value Members

  1. object BufferedSubscriber extends Builders with BuildersImpl with Serializable
  2. object CacheUntilConnectSubscriber extends Serializable
  3. object ConnectableSubscriber extends Serializable
  4. object SafeSubscriber extends Serializable
  5. object Subscriber extends Serializable

Ungrouped