@@ -32,19 +32,25 @@ public boolean sendMessage(String message) {
3232 //Todo: Send message using HTTPClient
3333
3434 HttpRequest httpRequest = HttpRequest .newBuilder ()
35- .POST (HttpRequest .BodyPublishers .ofString ("Hello World" ))
35+ .POST (HttpRequest .BodyPublishers .ofString (message ))
3636 .uri (URI .create (hostName + "/mytopic" ))
3737 .build ();
3838 try {
3939 //Todo: handle long blocking send requests to not freeze the JavaFX thread
4040 //1. Use thread send message?
4141 //2. Use async?
4242 var response = http .send (httpRequest , HttpResponse .BodyHandlers .ofString ());
43+ if (response .statusCode () != 200 ) {
44+ System .err .println ("Failed to send message. HTTP Status: " + response .statusCode ());
45+ System .err .println ("Response body: " + response .body ());
46+ return false ;
47+ }
4348 return true ;
4449 } catch (IOException e ) {
45- System .out .println ("Error sending message" );
50+ System .err .println ("Network I/O error sending message: " + e . getMessage () );
4651 } catch (InterruptedException e ) {
47- System .out .println ("Interrupted" );
52+ System .err .println ("Send message operation interrupted" );
53+ Thread .currentThread ().interrupt ();
4854 }
4955 return false ;
5056 }
@@ -58,11 +64,34 @@ public void receiveMessage(Consumer<NtfyMessageDto> messageHandler) {
5864 .build ();
5965
6066 http .sendAsync (httpRequest , HttpResponse .BodyHandlers .ofLines ())
61- .thenAccept (response -> response .body ()
62- .map (s ->
63- mapper .readValue (s , NtfyMessageDto .class ))
64- .filter (message -> message .event ().equals ("message" ))
65- .peek (System .out ::println )
66- .forEach (messageHandler ));
67+ .thenAccept (response -> {
68+ if (response .statusCode () != 200 ) {
69+ System .err .println ("Error connecting to stream. HTTP Status: " + response .statusCode ());
70+ return ;
71+ }
72+ response .body ()
73+ .map (s -> {
74+ try {
75+ return mapper .readValue (s , NtfyMessageDto .class );
76+ } catch (Exception e ) {
77+ System .err .println ("Failed to parse JSON: " + e .getMessage ());
78+ return null ;
79+ }
80+ })
81+ .filter (Objects ::nonNull )
82+ .filter (message -> "message" .equals (message .event ()))
83+ .peek (m -> {
84+ var time = java .time .Instant .ofEpochSecond (m .time ())
85+ .atZone (java .time .ZoneId .systemDefault ())
86+ .toLocalTime ();
87+ System .out .println (time + " " + m .message ());
88+ })
89+ .forEach (messageHandler );
90+ }).exceptionally (e -> {
91+ System .err .println ("Async connection error: " + e .getMessage ());
92+ e .printStackTrace ();
93+ return null ;
94+ });
6795 }
6896}
97+
0 commit comments