コード例 #1
0
ファイル: api.go プロジェクト: marsmensch/blobstash
func vkvWatchKeyHandler(vkvhub *hub.Hub) func(http.ResponseWriter, *http.Request) {
	return func(w http.ResponseWriter, r *http.Request) {
		vars := mux.Vars(r)
		defer func() {
			log.Printf("WATCH CLOSE")
		}()
		conn, _ := sse.Upgrade(w, r)
		notify := w.(http.CloseNotifier).CloseNotify()
		stream := vkvhub.Sub(vars["key"])
	L:
		for {
			select {
			case <-notify:
				log.Printf("Close")
				vkvhub.Unsub(vars["key"], stream)
				break L
			case m := <-stream:
				conn.WriteString(m)
			}
		}
	}
}