1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.util.concurrent;
17
18 import io.netty.util.internal.ObjectUtil;
19 import io.netty.util.internal.logging.InternalLogger;
20 import io.netty.util.internal.logging.InternalLoggerFactory;
21
22
23
24
25
26 @Deprecated
27 public final class UnaryPromiseNotifier<T> implements FutureListener<T> {
28 private static final InternalLogger logger = InternalLoggerFactory.getInstance(UnaryPromiseNotifier.class);
29 private final Promise<? super T> promise;
30
31 public UnaryPromiseNotifier(Promise<? super T> promise) {
32 this.promise = ObjectUtil.checkNotNull(promise, "promise");
33 }
34
35 @Override
36 public void operationComplete(Future<T> future) throws Exception {
37 cascadeTo(future, promise);
38 }
39
40 public static <X> void cascadeTo(Future<X> completedFuture, Promise<? super X> promise) {
41 if (completedFuture.isSuccess()) {
42 if (!promise.trySuccess(completedFuture.getNow())) {
43 logger.warn("Failed to mark a promise as success because it is done already: {}", promise);
44 }
45 } else if (completedFuture.isCancelled()) {
46 if (!promise.cancel(false)) {
47 logger.warn("Failed to cancel a promise because it is done already: {}", promise);
48 }
49 } else {
50 if (!promise.tryFailure(completedFuture.cause())) {
51 logger.warn("Failed to mark a promise as failure because it's done already: {}", promise,
52 completedFuture.cause());
53 }
54 }
55 }
56 }