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 }