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
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceThis is called when a subscription is made to the publisherprivate class -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate longprivate final NonBlockingMutexExecutorprivate booleanprivate Throwableprivate booleanprivate org.reactivestreams.Subscriber<? super T> private final SingleSubscriberPublisher.OnSubscriptionCallback -
Constructor Summary
ConstructorsConstructorDescriptionConstructs a publisher with no callback when subscribedSingleSubscriberPublisher(SingleSubscriberPublisher.OnSubscriptionCallback subscriptionCallback) The producing code can provide a callback to know when the subscriber attaches -
Method Summary
Modifier and TypeMethodDescriptionprivate voidprivate voidprivate voidvoidCalled by the producing code to say there is no more data to offer and the stream is completevoidCalled from the producing code to offer data up ready for a subscriber to read itvoidvoid
-
Field Details
-
dataQ
-
mutex
-
subscriptionCallback
-
subscriber
-
pendingThrowable
-
running
private boolean running -
noMoreData
private boolean noMoreData -
demand
private long demand
-
-
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
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
-
handleError
-
handleOnComplete
private void handleOnComplete() -
subscribe
-
maybeReadInMutex
private void maybeReadInMutex()
-