Skip to content
This repository was archived by the owner on Jul 31, 2022. It is now read-only.

Commit 3b91d5f

Browse files
committed
Added parameters to SSE
1 parent 679af05 commit 3b91d5f

1 file changed

Lines changed: 36 additions & 10 deletions

File tree

src/ktt/lib/httpserver/handler/SSEHandler.java

Lines changed: 36 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)