From d7f7acc7f3867a3caea5c3e6143b6c50b1b090e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20=C5=A0ediv=C3=BD?= Date: Sat, 2 Dec 2023 00:13:47 +0100 Subject: [PATCH] room events optional sse. --- internal/api/rooms.go | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/internal/api/rooms.go b/internal/api/rooms.go index 60aaa44..056e92d 100644 --- a/internal/api/rooms.go +++ b/internal/api/rooms.go @@ -252,10 +252,16 @@ func (manager *ApiManagerCtx) roomGenericAction(action func(ctx context.Context, } func (manager *ApiManagerCtx) events(w http.ResponseWriter, r *http.Request) { - w.Header().Set("Content-Type", "text/event-stream") w.Header().Set("Cache-Control", "no-cache") w.Header().Set("Connection", "keep-alive") + sse := r.URL.Query().Has("sse") + if sse { + w.Header().Set("Content-Type", "text/event-stream") + } else { + w.Header().Set("Content-Type", "application/json") + } + flusher, ok := w.(http.Flusher) if !ok { http.Error(w, "Connection does not support streaming", http.StatusBadRequest) @@ -277,7 +283,12 @@ func (manager *ApiManagerCtx) events(w http.ResponseWriter, r *http.Request) { return } - fmt.Fprintf(w, "data: %s\n\n", jsonData) + if sse { + fmt.Fprintf(w, "data: %s\n\n", jsonData) + } else { + fmt.Fprintf(w, "%s\n", jsonData) + } + flusher.Flush() } }