From b0af2b4c1125e8397fdd9316dd0127ee7eddb29f Mon Sep 17 00:00:00 2001 From: Manu Mtz-Almeida Date: Wed, 13 May 2015 20:27:45 +0200 Subject: [PATCH] Using github.com/manucorporat/sse --- render/ssevent.go | 47 +++++++---------------------------------------- 1 file changed, 7 insertions(+), 40 deletions(-) diff --git a/render/ssevent.go b/render/ssevent.go index a0819987..1b283b60 100644 --- a/render/ssevent.go +++ b/render/ssevent.go @@ -1,10 +1,9 @@ package render import ( - "encoding/json" - "fmt" "net/http" - "reflect" + + "github.com/manucorporat/sse" ) type sseRender struct{} @@ -20,42 +19,10 @@ func (_ sseRender) Render(w http.ResponseWriter, code int, data ...interface{}) func WriteSSEvent(w http.ResponseWriter, eventName string, data interface{}) error { header := w.Header() if len(header.Get("Content-Type")) == 0 { - w.Header().Set("Content-Type", "text/event-stream") + header.Set("Content-Type", "text/event-stream") } - var stringData string - switch typeOfData(data) { - case reflect.Struct, reflect.Slice, reflect.Map: - if jsonBytes, err := json.Marshal(data); err == nil { - stringData = string(jsonBytes) - } else { - return err - } - case reflect.Ptr: - stringData = escape(fmt.Sprintf("%v", &data)) - default: - stringData = escape(fmt.Sprintf("%v", data)) - } - _, err := fmt.Fprintf(w, "event: %s\ndata: %s\n\n", escape(eventName), stringData) - return err -} - -func typeOfData(data interface{}) reflect.Kind { - value := reflect.ValueOf(data) - valueType := value.Kind() - if valueType == reflect.Ptr { - newValue := value.Elem().Kind() - fmt.Println(newValue) - if newValue == reflect.Struct || - newValue == reflect.Slice || - newValue == reflect.Map { - return newValue - } else { - return valueType - } - } - return valueType -} - -func escape(str string) string { - return str + return sse.Encode(w, sse.Event{ + Event: eventName, + Data: data, + }) }