Class SingleSubscriberPublisher<T>

java.lang.Object
graphql.execution.reactive.SingleSubscriberPublisher<T>
Type Parameters:
T - the things to publish
All Implemented Interfaces:
org.reactivestreams.Publisher<T>

public class SingleSubscriberPublisher<T> extends Object implements org.reactivestreams.Publisher<T>
A Publisher of things that are buffered and handles a single subscriber at a time. Rule #1 of reactive streams is don't write your own implementation. However rule #1 of graphql-java is that we have no unnecessary dependencies and force users into a code corner. So we chose to have a very simple implementation (single subscriber) implementation that allows a stream of results to be streamed out. People can wrap this is a more complete implementation if they so choose. Inspired by Public Domain CC0 code at https://github.com/jroper/reactive-streams-servlet/tree/master/reactive-streams-servlet/src/main/java/org/reactivestreams/servlet
  • Constructor Details

    • SingleSubscriberPublisher

      public SingleSubscriberPublisher()
      Constructs a publisher with no callback when subscribed
    • SingleSubscriberPublisher

      public SingleSubscriberPublisher(SingleSubscriberPublisher.OnSubscriptionCallback subscriptionCallback)
      The producing code can provide a callback to know when the subscriber attaches
      Parameters:
      subscriptionCallback - the callback when some ones
  • Method Details

    • offer

      public void offer(T data)
      Called from the producing code to offer data up ready for a subscriber to read it
      Parameters:
      data - the data to offer
    • noMoreData

      public void noMoreData()
      Called by the producing code to say there is no more data to offer and the stream is complete
    • offerError

      public void offerError(Throwable t)
    • subscribe

      public void subscribe(org.reactivestreams.Subscriber<? super T> subscriber)
      Specified by:
      subscribe in interface org.reactivestreams.Publisher<T>