package api import ( "fmt" "net/http" "git.elnu.com/ElnuDev/jichanorg/httputils" . "git.elnu.com/ElnuDev/jichanorg/shiritori/clients" ) func GenerateApiEvents(clients *ClientSet) httputils.Handler { return httputils.GenerateSseHandler(func(w http.ResponseWriter, r *http.Request) { sendEvent := func(events ...httputils.SseEvent) { for _, event := range events { fmt.Fprint(w, event.Encode()) } w.(http.Flusher).Flush() } sendEvent(clients.PlayerCountEvent(1)) ctx := r.Context() channel := make(Client) clients.Connect(channel) outer: for { select { case <-ctx.Done(): clients.Disconnect(channel) break outer case events := <-channel: sendEvent(events...) } } }) }