working on message bus
Signed-off-by: Stephan Richter <s.richter@srsoftware.de>
This commit is contained in:
@@ -64,7 +64,7 @@ public class Application {
|
||||
var server = HttpServer.create(new InetSocketAddress(port), 0);
|
||||
try {
|
||||
new Translations().bindPath("/api/translations").on(server);
|
||||
new MessageApi().bindPath().on(server);
|
||||
new MessageApi().bindPath("/api/bus").on(server);
|
||||
new MessageSystem(config);
|
||||
new UserModule(config).bindPath("/api/user").on(server);
|
||||
new TagModule(config).bindPath("/api/tags").on(server);
|
||||
|
||||
@@ -12,6 +12,7 @@ import java.util.LinkedList;
|
||||
import java.util.List;
|
||||
|
||||
import static de.srsoftware.umbrella.core.Constants.*;
|
||||
import static java.lang.System.Logger.Level.*;
|
||||
import static java.net.HttpURLConnection.HTTP_OK;
|
||||
|
||||
public class MessageApi extends BaseHandler{
|
||||
@@ -22,23 +23,26 @@ public class MessageApi extends BaseHandler{
|
||||
@Override
|
||||
public boolean doGet(Path path, HttpExchange ex) throws IOException {
|
||||
var headers = ex.getResponseHeaders();
|
||||
var addr = ex.getRemoteAddress();
|
||||
headers.add(CONTENT_TYPE, MimeType.MIME_EVENT_STREAM);
|
||||
headers.add(CACHE_CONTROL,NO_CACHE);
|
||||
headers.add(CONNECTION,KEEP_ALIVE);
|
||||
ex.sendResponseHeaders(HTTP_OK,0);
|
||||
try (var os = ex.getResponseBody(); var stream = new PrintWriter(os)){
|
||||
LOG.log(INFO,"{0} opened event stream.",addr);
|
||||
var counter = 0;
|
||||
var id = 0L;
|
||||
while (true){
|
||||
while (!stream.checkError()){
|
||||
Thread.sleep(100);
|
||||
if (eventQueue.isEmpty()){
|
||||
counter++;
|
||||
if (counter > 300) counter = sendBeacon(stream);
|
||||
if (++counter > 300) counter = sendBeacon(stream);
|
||||
} else {
|
||||
sendEvent(stream,id++,eventQueue.remove(0));
|
||||
counter = 0;
|
||||
}
|
||||
}
|
||||
LOG.log(INFO,"{0} disconnected from event stream.",addr);
|
||||
return true;
|
||||
} catch (InterruptedException e) {
|
||||
throw new UmbrellaException("EventStream broken").causedBy(e);
|
||||
}
|
||||
@@ -54,6 +58,7 @@ public class MessageApi extends BaseHandler{
|
||||
}
|
||||
|
||||
private int sendBeacon(PrintWriter stream) {
|
||||
LOG.log(DEBUG,"sending keep-alive…");
|
||||
stream.print(": keep-alive\n\n");
|
||||
stream.flush();
|
||||
return 0;
|
||||
|
||||
Reference in New Issue
Block a user