@@ -20,7 +20,7 @@ public class SSEHandler extends SimpleHttpHandler {
2020
2121 private final List <SimpleHttpExchange > listeners = new ArrayList <>(); // listeners
2222 private int id = -1 ;
23- private final LinkedList <String > queue = new LinkedList <>(); // event queue
23+ private final LinkedList <EventStreamRecord > queue = new LinkedList <>(); // event queue
2424
2525 @ Override
2626 public final void handle (final SimpleHttpExchange exchange ) throws IOException {
@@ -40,30 +40,56 @@ public final void handle(final SimpleHttpExchange exchange) throws IOException{
4040 }catch (final NumberFormatException | NullPointerException ignored ){ }
4141
4242 for (int index = latest ; index < queue .size (); index ++)
43- exchange .send (queue .get (index ));
43+ exchange .send (queue .get (index ). toString ( index ) );
4444
4545 listeners .add (exchange );
4646 }
4747
48+ //
49+
4850 /**
49- * Pushes an event to the event stream.
51+ * Pushes an event to the stream.
5052 *
51- * @param s event data
53+ * @param retry how long to reconnect (leave 0 for no retry)
54+ * @param event event name (leave blank for no event)
55+ * @param data event data (leave blank for no data)
5256 *
5357 * @since 02.00.00
5458 * @author Ktt Development
5559 */
56- public final void push (final String s ){
60+ public synchronized final void push (final int retry , final String event , final String data ){
5761 id ++;
58- queue .add (s );
62+ final EventStreamRecord record = new EventStreamRecord (retry ,event ,data );
63+ queue .add (record );
5964 listeners .forEach (exchange -> {
60- final StringBuilder OUT = new StringBuilder ();
61- OUT .append ("id: " ).append (id ).append ("\n " );
62- OUT .append ("data: " ).append (s ).append ("\n \n " );
6365 try {
64- exchange .send (OUT .toString ());
66+ exchange .send (record .toString (id ));
6567 }catch (final IOException ignored ){}
6668 });
6769 }
6870
71+ //
72+
73+ private static class EventStreamRecord {
74+
75+ private final int retry ;
76+ private final String event ;
77+ private final String data ;
78+
79+ public EventStreamRecord (final int retry , final String event , final String data ){
80+ this .retry = retry ;
81+ this .event = event ;
82+ this .data = data ;
83+ }
84+
85+ public final String toString (final int id ){
86+ return
87+ "id: " + id + "\n " +
88+ (retry > 0 ? "retry: " + retry + "\n " : "" ) +
89+ (!event .isBlank () ? "event: " + event + "\n " : "" ) +
90+ (!data .isBlank () ? "data: " + data + "\n " : "" ) + "\n " ;
91+ }
92+
93+ }
94+
6995}
0 commit comments