1111import java .util .stream .Collectors ;
1212
1313import io .vertx .core .Vertx ;
14+ import io .vertx .core .http .HttpServerResponse ;
1415import io .vertx .core .logging .Logger ;
1516import io .vertx .core .logging .LoggerFactory ;
1617import io .vertx .ext .web .RoutingContext ;
@@ -65,10 +66,12 @@ public class ApiHandlerImpl implements ApiHandler {
6566
6667 @ Override
6768 public void handleFrameworkIndex (RoutingContext routingContext ) {
68- routingContext .response ()
69- .putHeader ("Content-Type" , "text/html" )
70- .setStatusCode (200 )
71- .end (HTML_FRAMEWORK_INDEX );
69+ HttpServerResponse response = routingContext .response ();
70+ if (!response .ended () && !response .closed ()) {
71+ response .putHeader ("Content-Type" , "text/html" )
72+ .setStatusCode (200 )
73+ .end (HTML_FRAMEWORK_INDEX );
74+ }
7275 }
7376
7477 @ Override
@@ -78,13 +81,19 @@ public void handlePush(RoutingContext routingContext) {
7881 try {
7982 request = ApiUtils .jsonToObject (buffer .toString (), PushRequest .class );
8083 } catch (IOException e ) {
81- routingContext .response ().setStatusCode (400 ).end ();
84+ HttpServerResponse response = routingContext .response ();
85+ if (!response .ended () && !response .closed ()) {
86+ response .setStatusCode (400 ).end ();
87+ }
8288 return ;
8389 }
8490 if ((request .getExtras () != null && request .getExtras ().size () > 10 ) ||
8591 !DataVerifier .verify (request ) ||
8692 routingContext .request ().getHeader (Constants .HEADER_PRODUCT ) == null ) {
87- routingContext .response ().setStatusCode (400 ).end ();
93+ HttpServerResponse response = routingContext .response ();
94+ if (!response .ended () && !response .closed ()) {
95+ response .setStatusCode (400 ).end ();
96+ }
8897 return ;
8998 }
9099 Message message = new Message ();
@@ -157,15 +166,19 @@ public void handlePush(RoutingContext routingContext) {
157166 ar -> {
158167 if (ar .succeeded ()) {
159168 SendMessageResponse response = ar .result ().body ();
160- routingContext .response ()
161- .setStatusCode (response .getCode () == SendMessageResponse .CODE_SUCCESS ?
162- NO_CONTENT .code () : 500 )
163- .end ();
169+ HttpServerResponse httpResponse = routingContext .response ();
170+ if (!httpResponse .ended () && !httpResponse .closed ()) {
171+ httpResponse .setStatusCode (response .getCode () == SendMessageResponse .CODE_SUCCESS ?
172+ NO_CONTENT .code () : 500 )
173+ .end ();
174+ }
164175 } else {
165176 logger .error ("Cannot send message" , ar .cause ());
166- routingContext .response ()
167- .setStatusCode (500 )
168- .end ();
177+ HttpServerResponse response = routingContext .response ();
178+ if (!response .ended () && !response .closed ()) {
179+ response .setStatusCode (500 )
180+ .end ();
181+ }
169182 }
170183 });
171184 });
@@ -178,17 +191,22 @@ public MiPushApi getMiPushApi () {
178191
179192 @ Override
180193 public void handleTesterIndex (RoutingContext routingContext ) {
181- routingContext .response ()
182- .putHeader ("Content-Type" , "text/html" )
183- .setStatusCode (200 )
184- .end (HTML_TESTER_INDEX );
194+ HttpServerResponse response = routingContext .response ();
195+ if (!response .ended () && !response .closed ()) {
196+ response .putHeader ("Content-Type" , "text/html" )
197+ .setStatusCode (200 )
198+ .end (HTML_TESTER_INDEX );
199+ }
185200 }
186201
187202 @ Override
188203 public void handleUpdate (RoutingContext routingContext ) {
189204 final String productId = routingContext .request ().getHeader (Constants .HEADER_PRODUCT );
190205 if (productId == null ) {
191- routingContext .response ().setStatusCode (NO_CONTENT .code ()).end ();
206+ HttpServerResponse response = routingContext .response ();
207+ if (!response .ended () && !response .closed ()) {
208+ response .setStatusCode (NO_CONTENT .code ()).end ();
209+ }
192210 return ;
193211 }
194212 String repo ;
@@ -205,7 +223,10 @@ public void handleUpdate(RoutingContext routingContext) {
205223 break ;
206224 default :
207225 logger .warn ("An unknown client is attempting to get update status: " + productId );
208- routingContext .response ().setStatusCode (NO_CONTENT .code ()).end ();
226+ HttpServerResponse response = routingContext .response ();
227+ if (!response .ended () && !response .closed ()) {
228+ response .setStatusCode (NO_CONTENT .code ()).end ();
229+ }
209230 return ;
210231 }
211232 getGitHubApi ().getLatestRelease (owner , repo , ar -> {
@@ -216,7 +237,10 @@ public void handleUpdate(RoutingContext routingContext) {
216237 || release .getTagName () == null
217238 || release .getName ().trim ().equals ("" )
218239 || release .getTagName ().trim ().equals ("" )) {
219- routingContext .response ().setStatusCode (NO_CONTENT .code ()).end ();
240+ HttpServerResponse response = routingContext .response ();
241+ if (!response .ended () && !response .closed ()) {
242+ response .setStatusCode (NO_CONTENT .code ()).end ();
243+ }
220244 } else {
221245 Update update = new Update ();
222246 update .setHtmlLink (release .getHtmlUrl ());
@@ -226,18 +250,22 @@ public void handleUpdate(RoutingContext routingContext) {
226250 update .setVersionCode (Integer .MAX_VALUE );
227251 }
228252 update .setVersionName (release .getName ());
229- routingContext .response ()
230- .putHeader ("Content-Type" , "application/json" )
231- .setChunked (true )
232- .setStatusCode (200 )
233- .end (ApiUtils .tryObjectToJson (update ));
253+ HttpServerResponse response = routingContext .response ();
254+ if (!response .ended () && !response .closed ()) {
255+ response .putHeader ("Content-Type" , "application/json" )
256+ .setChunked (true )
257+ .setStatusCode (200 )
258+ .end (ApiUtils .tryObjectToJson (update ));
259+ }
234260 }
235261 } else {
236262 logger .error ("Unable to get update" , ar .cause ());
237- routingContext .response ()
238- .setChunked (true )
239- .setStatusCode (500 )
240- .end ();
263+ HttpServerResponse response = routingContext .response ();
264+ if (!response .ended () && !response .closed ()) {
265+ response .setChunked (true )
266+ .setStatusCode (500 )
267+ .end ();
268+ }
241269 }
242270 });
243271 }
@@ -249,21 +277,23 @@ public GitHubApi getGitHubApi() {
249277
250278 @ Override
251279 public void handleGetTopicList (RoutingContext routingContext ) {
252- routingContext .response ()
253- .setChunked (true )
254- .setStatusCode (200 )
255- .putHeader ("Content-Type" , "application/json" )
256- .end (ApiUtils .tryObjectToJson (TopicRegistry
257- .getInstance ()
258- .allTopics ()
259- .stream ()
260- .peek (topic -> {
261- topic .setTitle (Resources .getString (topic .getTitleResource (),
262- routingContext ));
263- topic .setDescription (Resources .getString (topic .getDescriptionResource (),
264- routingContext ));
265- })
266- .collect (Collectors .toList ())
267- ));
280+ HttpServerResponse response = routingContext .response ();
281+ if (!response .ended () && !response .closed ()) {
282+ response .setChunked (true )
283+ .setStatusCode (200 )
284+ .putHeader ("Content-Type" , "application/json" )
285+ .end (ApiUtils .tryObjectToJson (TopicRegistry
286+ .getInstance ()
287+ .allTopics ()
288+ .stream ()
289+ .peek (topic -> {
290+ topic .setTitle (Resources .getString (topic .getTitleResource (),
291+ routingContext ));
292+ topic .setDescription (Resources .getString (topic .getDescriptionResource (),
293+ routingContext ));
294+ })
295+ .collect (Collectors .toList ())
296+ ));
297+ }
268298 }
269299}
0 commit comments