Пример #1
0
func publishHandler(w http.ResponseWriter, r *http.Request) {
	id, err := sessionHandling(w, r)
	if err != nil {
		log.Printf("error in session handling (%v)", err)
		fmt.Fprintf(w, "Error: %v", err)
		return
	}
	decoder := json.NewDecoder(r.Body)
	evt := susigo.Event{}
	err = decoder.Decode(&evt)
	if err != nil {
		log.Printf("error while decoding event from http-publish-request body: %v", err)
		w.WriteHeader(400)
		w.Write([]byte("malformed payload"))
		return
	}
	if evt.Topic == "" {
		log.Printf("error while decoding event from http-publish-request body: %v", "topic empty")
		w.WriteHeader(400)
		w.Write([]byte("you MUST specify at least a topic for your event"))
		return
	}
	evt.SessionID = id
	ready := make(chan bool)

	susi.Publish(evt, func(evt *susigo.Event) {
		encoder := json.NewEncoder(w)
		encoder.Encode(evt)
		ready <- true
	})

	log.Printf("publish event with topic '%v' for session %v via http", evt.Topic, id)
	<-ready
}