1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.channel;
17
18 import io.netty.util.concurrent.Future;
19 import io.netty.util.concurrent.GenericFutureListener;
20 import io.netty.util.internal.PromiseNotificationUtil;
21 import io.netty.util.internal.UnstableApi;
22 import io.netty.util.internal.logging.InternalLogger;
23 import io.netty.util.internal.logging.InternalLoggerFactory;
24
25 import java.util.concurrent.ExecutionException;
26 import java.util.concurrent.TimeUnit;
27 import java.util.concurrent.TimeoutException;
28
29 import static io.netty.util.internal.ObjectUtil.checkNotNull;
30
31 @UnstableApi
32 public final class DelegatingChannelPromiseNotifier implements ChannelPromise, ChannelFutureListener {
33 private static final InternalLogger logger =
34 InternalLoggerFactory.getInstance(DelegatingChannelPromiseNotifier.class);
35 private final ChannelPromise delegate;
36 private final boolean logNotifyFailure;
37
38 public DelegatingChannelPromiseNotifier(ChannelPromise delegate) {
39 this(delegate, !(delegate instanceof VoidChannelPromise));
40 }
41
42 public DelegatingChannelPromiseNotifier(ChannelPromise delegate, boolean logNotifyFailure) {
43 this.delegate = checkNotNull(delegate, "delegate");
44 this.logNotifyFailure = logNotifyFailure;
45 }
46
47 @Override
48 public void operationComplete(ChannelFuture future) throws Exception {
49 InternalLogger internalLogger = logNotifyFailure ? logger : null;
50 if (future.isSuccess()) {
51 Void result = future.get();
52 PromiseNotificationUtil.trySuccess(delegate, result, internalLogger);
53 } else if (future.isCancelled()) {
54 PromiseNotificationUtil.tryCancel(delegate, internalLogger);
55 } else {
56 Throwable cause = future.cause();
57 PromiseNotificationUtil.tryFailure(delegate, cause, internalLogger);
58 }
59 }
60
61 @Override
62 public Channel channel() {
63 return delegate.channel();
64 }
65
66 @Override
67 public ChannelPromise setSuccess(Void result) {
68 delegate.setSuccess(result);
69 return this;
70 }
71
72 @Override
73 public ChannelPromise setSuccess() {
74 delegate.setSuccess();
75 return this;
76 }
77
78 @Override
79 public boolean trySuccess() {
80 return delegate.trySuccess();
81 }
82
83 @Override
84 public boolean trySuccess(Void result) {
85 return delegate.trySuccess(result);
86 }
87
88 @Override
89 public ChannelPromise setFailure(Throwable cause) {
90 delegate.setFailure(cause);
91 return this;
92 }
93
94 @Override
95 public ChannelPromise addListener(GenericFutureListener<? extends Future<? super Void>> listener) {
96 delegate.addListener(listener);
97 return this;
98 }
99
100 @Override
101 public ChannelPromise addListeners(GenericFutureListener<? extends Future<? super Void>>... listeners) {
102 delegate.addListeners(listeners);
103 return this;
104 }
105
106 @Override
107 public ChannelPromise removeListener(GenericFutureListener<? extends Future<? super Void>> listener) {
108 delegate.removeListener(listener);
109 return this;
110 }
111
112 @Override
113 public ChannelPromise removeListeners(GenericFutureListener<? extends Future<? super Void>>... listeners) {
114 delegate.removeListeners(listeners);
115 return this;
116 }
117
118 @Override
119 public boolean tryFailure(Throwable cause) {
120 return delegate.tryFailure(cause);
121 }
122
123 @Override
124 public boolean setUncancellable() {
125 return delegate.setUncancellable();
126 }
127
128 @Override
129 public ChannelPromise await() throws InterruptedException {
130 delegate.await();
131 return this;
132 }
133
134 @Override
135 public ChannelPromise awaitUninterruptibly() {
136 delegate.awaitUninterruptibly();
137 return this;
138 }
139
140 @Override
141 public boolean isVoid() {
142 return delegate.isVoid();
143 }
144
145 @Override
146 public ChannelPromise unvoid() {
147 return isVoid() ? new DelegatingChannelPromiseNotifier(delegate.unvoid()) : this;
148 }
149
150 @Override
151 public boolean await(long timeout, TimeUnit unit) throws InterruptedException {
152 return delegate.await(timeout, unit);
153 }
154
155 @Override
156 public boolean await(long timeoutMillis) throws InterruptedException {
157 return delegate.await(timeoutMillis);
158 }
159
160 @Override
161 public boolean awaitUninterruptibly(long timeout, TimeUnit unit) {
162 return delegate.awaitUninterruptibly(timeout, unit);
163 }
164
165 @Override
166 public boolean awaitUninterruptibly(long timeoutMillis) {
167 return delegate.awaitUninterruptibly(timeoutMillis);
168 }
169
170 @Override
171 public Void getNow() {
172 return delegate.getNow();
173 }
174
175 @Override
176 public boolean cancel(boolean mayInterruptIfRunning) {
177 return delegate.cancel(mayInterruptIfRunning);
178 }
179
180 @Override
181 public boolean isCancelled() {
182 return delegate.isCancelled();
183 }
184
185 @Override
186 public boolean isDone() {
187 return delegate.isDone();
188 }
189
190 @Override
191 public Void get() throws InterruptedException, ExecutionException {
192 return delegate.get();
193 }
194
195 @Override
196 public Void get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
197 return delegate.get(timeout, unit);
198 }
199
200 @Override
201 public ChannelPromise sync() throws InterruptedException {
202 delegate.sync();
203 return this;
204 }
205
206 @Override
207 public ChannelPromise syncUninterruptibly() {
208 delegate.syncUninterruptibly();
209 return this;
210 }
211
212 @Override
213 public boolean isSuccess() {
214 return delegate.isSuccess();
215 }
216
217 @Override
218 public boolean isCancellable() {
219 return delegate.isCancellable();
220 }
221
222 @Override
223 public Throwable cause() {
224 return delegate.cause();
225 }
226 }