use of reactor.core.publisher.Sinks.EmitResult in project reactor-core by reactor.
the class NextProcessor method onError.
@Override
public final void onError(Throwable cause) {
for (; ; ) {
EmitResult emitResult = tryEmitError(cause);
if (emitResult.isSuccess()) {
return;
}
boolean shouldRetry = EmitFailureHandler.FAIL_FAST.onEmitFailure(SignalType.ON_ERROR, emitResult);
if (shouldRetry) {
continue;
}
switch(emitResult) {
case FAIL_ZERO_SUBSCRIBER:
case FAIL_OVERFLOW:
case FAIL_CANCELLED:
return;
case FAIL_TERMINATED:
Operators.onErrorDropped(cause, currentContext());
return;
case FAIL_NON_SERIALIZED:
throw new EmissionException(emitResult, "Spec. Rule 1.3 - onSubscribe, onNext, onError and onComplete signaled to a Subscriber MUST be signaled serially.");
default:
throw new EmissionException(emitResult, "Unknown emitResult value");
}
}
}
use of reactor.core.publisher.Sinks.EmitResult in project reactor-core by reactor.
the class NextProcessor method onNext.
@Override
public final void onNext(@Nullable O value) {
if (value == null) {
emitEmpty(EmitFailureHandler.FAIL_FAST);
return;
}
for (; ; ) {
EmitResult emitResult = tryEmitValue(value);
if (emitResult.isSuccess()) {
return;
}
boolean shouldRetry = EmitFailureHandler.FAIL_FAST.onEmitFailure(SignalType.ON_NEXT, emitResult);
if (shouldRetry) {
continue;
}
switch(emitResult) {
case FAIL_ZERO_SUBSCRIBER:
// effectively NO-OP cause there's no subscriber, so no context :(
return;
case FAIL_OVERFLOW:
Operators.onDiscard(value, currentContext());
// the emitError will onErrorDropped if already terminated
onError(Exceptions.failWithOverflow("Backpressure overflow during Sinks.Many#emitNext"));
return;
case FAIL_CANCELLED:
Operators.onDiscard(value, currentContext());
return;
case FAIL_TERMINATED:
Operators.onNextDropped(value, currentContext());
return;
case FAIL_NON_SERIALIZED:
throw new EmissionException(emitResult, "Spec. Rule 1.3 - onSubscribe, onNext, onError and onComplete signaled to a Subscriber MUST be signaled serially.");
default:
throw new EmissionException(emitResult, "Unknown emitResult value");
}
}
}
Aggregations