github.com/insionng/yougam@v0.0.0-20170714101924-2bc18d833463/libraries/igm/sockjs-go.v2/sockjs/eventsource.go (about) 1 package sockjs 2 3 import ( 4 "fmt" 5 "io" 6 "net/http" 7 ) 8 9 func (h *handler) eventSource(rw http.ResponseWriter, req *http.Request) { 10 rw.Header().Set("content-type", "text/event-stream; charset=UTF-8") 11 fmt.Fprintf(rw, "\r\n") 12 rw.(http.Flusher).Flush() 13 14 recv := newHTTPReceiver(rw, h.options.ResponseLimit, new(eventSourceFrameWriter)) 15 sess, _ := h.sessionByRequest(req) 16 if err := sess.attachReceiver(recv); err != nil { 17 recv.sendFrame(cFrame) 18 recv.close() 19 return 20 } 21 22 select { 23 case <-recv.doneNotify(): 24 case <-recv.interruptedNotify(): 25 } 26 } 27 28 type eventSourceFrameWriter struct{} 29 30 func (*eventSourceFrameWriter) write(w io.Writer, frame string) (int, error) { 31 return fmt.Fprintf(w, "data: %s\r\n\r\n", frame) 32 }