11package ktt .lib .httpserver .handler ;
22
33import ktt .lib .httpserver .http .RequestMethod ;
4- import ktt .lib .httpserver .server .*;
4+ import ktt .lib .httpserver .server .SimpleHttpExchange ;
5+ import ktt .lib .httpserver .server .SimpleHttpHandler ;
56
67import java .io .IOException ;
78import java .util .*;
89
10+ /**
11+ * This handler processes event-streams.
12+ *
13+ * @see SimpleHttpHandler
14+ * @see com.sun.net.httpserver.HttpHandler
15+ * @since 02.00.00
16+ * @version 02.00.00
17+ * @author Ktt Development
18+ */
919public class SSEHandler extends SimpleHttpHandler {
1020
11- private final List <HttpSession > listeners = new ArrayList <>(); // listeners
21+ private final List <SimpleHttpExchange > listeners = new ArrayList <>(); // listeners
1222 private int id = -1 ;
1323 private final LinkedList <String > queue = new LinkedList <>(); // event queue
1424
@@ -24,13 +34,36 @@ public final void handle(final SimpleHttpExchange exchange) throws IOException{
2434 return ;
2535 }
2636 exchange .getResponseHeaders ().add ("content-type" ,"text/event-stream" );
27- final int latest = exchange .getRequestHeaders ().getFirst ("Last-Event-ID" )
28- exchange .send (200 );
37+ int latest = 0 ;
38+ try {
39+ latest = Integer .parseInt (exchange .getRequestHeaders ().getFirst ("Last-Event-ID" ));
40+ }catch (final NumberFormatException | NullPointerException ignored ){ }
41+
42+ for (int index = latest ; index < queue .size (); index ++)
43+ exchange .send (queue .get (index ));
44+
45+ listeners .add (exchange );
2946 }
3047
31- public final void addToEventQueue (final String s ){
48+ /**
49+ * Pushes an event to the event stream.
50+ *
51+ * @param s event data
52+ *
53+ * @since 02.00.00
54+ * @author Ktt Development
55+ */
56+ public final void push (final String s ){
3257 id ++;
3358 queue .add (s );
59+ 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 " );
63+ try {
64+ exchange .send (OUT .toString ());
65+ }catch (final IOException ignored ){}
66+ });
3467 }
3568
3669}
0 commit comments