1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package org.apache.hc.core5.http.nio.support;
28
29 import java.io.IOException;
30
31 import org.apache.hc.core5.http.HttpException;
32 import org.apache.hc.core5.http.HttpResponse;
33 import org.apache.hc.core5.http.HttpStatus;
34 import org.apache.hc.core5.http.message.BasicHttpResponse;
35 import org.apache.hc.core5.http.nio.AsyncEntityProducer;
36 import org.apache.hc.core5.http.nio.AsyncPushProducer;
37 import org.apache.hc.core5.http.nio.DataStreamChannel;
38 import org.apache.hc.core5.http.nio.ResponseChannel;
39 import org.apache.hc.core5.http.protocol.HttpContext;
40 import org.apache.hc.core5.util.Args;
41
42
43
44
45
46
47
48 public class BasicPushProducer implements AsyncPushProducer {
49
50 private final HttpResponse response;
51 private final AsyncEntityProducer dataProducer;
52
53 public BasicPushProducer(final HttpResponse response, final AsyncEntityProducer dataProducer) {
54 this.response = Args.notNull(response, "Response");
55 this.dataProducer = Args.notNull(dataProducer, "Entity producer");
56 }
57
58 public BasicPushProducer(final int code, final AsyncEntityProducer dataProducer) {
59 this(new BasicHttpResponse(code), dataProducer);
60 }
61
62 public BasicPushProducer(final AsyncEntityProducer dataProducer) {
63 this(HttpStatus.SC_OK, dataProducer);
64 }
65
66 @Override
67 public void produceResponse(final ResponseChannel channel, final HttpContext httpContext) throws HttpException, IOException {
68 channel.sendResponse(response, dataProducer, httpContext);
69 }
70
71 @Override
72 public int available() {
73 return dataProducer != null ? dataProducer.available() : 0;
74 }
75
76 @Override
77 public void produce(final DataStreamChannel channel) throws IOException {
78 if (dataProducer != null) {
79 dataProducer.produce(channel);
80 }
81 }
82
83 @Override
84 public void failed(final Exception cause) {
85 releaseResources();
86 }
87
88 @Override
89 public void releaseResources() {
90 if (dataProducer != null) {
91 dataProducer.releaseResources();
92 }
93 }
94
95 }