11package com .example ;
22
33import io .github .cdimascio .dotenv .Dotenv ;
4- import tools .jackson .databind .ObjectMapper ;
4+ import com . fasterxml .jackson .databind .ObjectMapper ;
55
66import java .io .IOException ;
77import java .net .URI ;
@@ -33,18 +33,14 @@ public boolean send(String message) {
3333 .header ("Cache" , "no" )
3434 .uri (URI .create (hostName + "/mytopic" ))
3535 .build ();
36+
3637 try {
37- //Todo: handle long blocking send requests to not freeze the JavaFX thread
38- //1. Use thread send message?
39- //2. Use async?
40- var reponse = http .send (httpRequest , HttpResponse .BodyHandlers .discarding ());
38+ http .send (httpRequest , HttpResponse .BodyHandlers .discarding ());
4139 return true ;
42- } catch (IOException e ) {
43- System .out .println ("Error sending message" );
44- } catch (InterruptedException e ) {
45- System .out .println ("Interruped sending message" );
40+ } catch (IOException | InterruptedException e ) {
41+ e .printStackTrace ();
42+ return false ;
4643 }
47- return false ;
4844 }
4945
5046 @ Override
@@ -54,29 +50,52 @@ public void receive(Consumer<NtfyMessageDto> messageHandler) {
5450 .uri (URI .create (hostName + "/mytopic/json" ))
5551 .build ();
5652
57- http .sendAsync (httpRequest , HttpResponse .BodyHandlers .ofLines ())
58- .thenAccept (response -> response .body ()
59- .map (s ->
60- mapper .readValue (s , NtfyMessageDto .class ))
61- .filter (message -> message .event ().equals ("message" ))
62- .peek (System .out ::println )
63- .forEach (messageHandler ));
53+ try {
54+ http .send (httpRequest , HttpResponse .BodyHandlers .ofLines ())
55+ .body ()
56+ .map (s -> {
57+ try {
58+ return mapper .readValue (s , NtfyMessageDto .class );
59+ } catch (IOException e ) {
60+ return null ;
61+ }
62+ })
63+ .filter (Objects ::nonNull )
64+ .filter (message -> "message" .equals (message .event ()))
65+ .forEach (messageHandler );
66+
67+ } catch (IOException | InterruptedException e ) {
68+ e .printStackTrace ();
69+ }
6470 }
6571
66- @ Override
67- public void sendFile (String filename , byte [] data ) {
68- HttpRequest request = HttpRequest .newBuilder ()
69- .POST (HttpRequest .BodyPublishers .ofByteArray (data ))
70- .header ("Content-Type" , "application/octet-stream" )
71- .header ("Title" , filename ) // ntfy stöder Title-header
72- .uri (URI .create (hostName + "/mytopic" ))
73- .build ();
74- try {
75- http .send (request , HttpResponse .BodyHandlers .discarding ());
76- } catch (IOException | InterruptedException e ) {
77- e .printStackTrace ();
72+ @ Override
73+ public void sendFile (String filename , byte [] data ) {
74+ HttpRequest request = HttpRequest .newBuilder ()
75+ .POST (HttpRequest .BodyPublishers .ofByteArray (data ))
76+ .header ("Content-Type" , "application/octet-stream" )
77+ .header ("Title" , filename )
78+ .uri (URI .create (hostName + "/mytopic" ))
79+ .build ();
7880
81+ try {
82+ http .send (request , HttpResponse .BodyHandlers .discarding ());
83+ } catch (IOException | InterruptedException e ) {
84+ e .printStackTrace ();
7985 }
86+ }
8087
88+ public void sendAsync (String message ) {
89+ HttpRequest httpRequest = HttpRequest .newBuilder ()
90+ .POST (HttpRequest .BodyPublishers .ofString (message ))
91+ .header ("Cache" , "no" )
92+ .uri (URI .create (hostName + "/mytopic" ))
93+ .build ();
94+
95+ http .sendAsync (httpRequest , HttpResponse .BodyHandlers .discarding ())
96+ .thenAccept (response -> System .out .println ("Message sent async" ))
97+ .exceptionally (e -> { e .printStackTrace (); return null ; });
8198 }
82- }
99+ }
100+
101+
0 commit comments