Преглед на файлове

Using github.com/manucorporat/sse

Manu Mtz-Almeida преди 10 години
родител
ревизия
b0af2b4c11
променени са 1 файла, в които са добавени 7 реда и са изтрити 40 реда
  1. 7 40
      render/ssevent.go

+ 7 - 40
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")
-	}
-	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))
+		header.Set("Content-Type", "text/event-stream")
 	}
-	_, 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,
+	})
 }