|
16 | 16 | package io.jooby; |
17 | 17 |
|
18 | 18 | import javax.annotation.Nonnull; |
| 19 | +import javax.annotation.Nullable; |
19 | 20 | import java.nio.charset.Charset; |
20 | 21 | import java.nio.charset.StandardCharsets; |
21 | 22 |
|
| 23 | +/** |
| 24 | + * Non-blocking sender. Reactive responses uses this class to send partial data in non-blocking |
| 25 | + * manner. |
| 26 | + * |
| 27 | + * RxJava example: |
| 28 | + * |
| 29 | + * <pre>{@code |
| 30 | + * |
| 31 | + * Sender sender = ctx.getSender(); |
| 32 | + * |
| 33 | + * Flux.fromCallable(...) |
| 34 | + * .subscribe(new Subscriber () { |
| 35 | + * |
| 36 | + * onSubscribe(Subscription s) { |
| 37 | + * this.subscription = s; |
| 38 | + * this.subscription.request(1); |
| 39 | + * } |
| 40 | + * |
| 41 | + * onNext(Object next) { |
| 42 | + * sender.write(next, (ctx, cause) -> { |
| 43 | + * subscription.request(1); |
| 44 | + * }); |
| 45 | + * } |
| 46 | + * |
| 47 | + * onError(Throwable error) { |
| 48 | + * subscription.cancel(); |
| 49 | + * } |
| 50 | + * |
| 51 | + * onComplete() { |
| 52 | + * sender.close(); |
| 53 | + * } |
| 54 | + * }) |
| 55 | + * |
| 56 | + * }</pre> |
| 57 | + * |
| 58 | + * @since 2.0.0 |
| 59 | + * @author edgar |
| 60 | + */ |
22 | 61 | public interface Sender { |
23 | 62 |
|
| 63 | + /** |
| 64 | + * Write callback. |
| 65 | + */ |
24 | 66 | interface Callback { |
25 | | - void onComplete(Context ctx, Throwable cause); |
| 67 | + /** |
| 68 | + * Callback after for <code>write</code> operation. |
| 69 | + * |
| 70 | + * @param ctx Web context. |
| 71 | + * @param cause Cause in case of error or <code>null</code> for success. |
| 72 | + */ |
| 73 | + void onComplete(@Nonnull Context ctx, @Nullable Throwable cause); |
26 | 74 | } |
27 | 75 |
|
28 | | - default Sender sendString(@Nonnull String data, @Nonnull Callback callback) { |
29 | | - return sendString(data, StandardCharsets.UTF_8, callback); |
| 76 | + /** |
| 77 | + * Write a string chunk. Chunk is flushed immediately. |
| 78 | + * |
| 79 | + * @param data String chunk. |
| 80 | + * @param callback Callback. |
| 81 | + * @return This sender. |
| 82 | + */ |
| 83 | + @Nonnull default Sender write(@Nonnull String data, @Nonnull Callback callback) { |
| 84 | + return write(data, StandardCharsets.UTF_8, callback); |
30 | 85 | } |
31 | 86 |
|
32 | | - default Sender sendString(@Nonnull String data, Charset charset, @Nonnull Callback callback) { |
33 | | - return sendBytes(data.getBytes(charset), callback); |
| 87 | + /** |
| 88 | + * Write a string chunk. Chunk is flushed immediately. |
| 89 | + * |
| 90 | + * @param data String chunk. |
| 91 | + * @param charset Charset. |
| 92 | + * @param callback Callback. |
| 93 | + * @return This sender. |
| 94 | + */ |
| 95 | + @Nonnull default Sender write(@Nonnull String data, @Nonnull Charset charset, |
| 96 | + @Nonnull Callback callback) { |
| 97 | + return write(data.getBytes(charset), callback); |
34 | 98 | } |
35 | 99 |
|
36 | | - Sender sendBytes(@Nonnull byte[] data, @Nonnull Callback callback); |
| 100 | + /** |
| 101 | + * Write a bytes chunk. Chunk is flushed immediately. |
| 102 | + * |
| 103 | + * @param data Bytes chunk. |
| 104 | + * @param callback Callback. |
| 105 | + * @return This sender. |
| 106 | + */ |
| 107 | + @Nonnull Sender write(@Nonnull byte[] data, @Nonnull Callback callback); |
37 | 108 |
|
| 109 | + /** |
| 110 | + * Close the sender. |
| 111 | + */ |
38 | 112 | void close(); |
39 | 113 | } |
0 commit comments