package input import ( "fmt" "io/ioutil" "net/http" "github.com/Shugyousha/stasher/work" ) type HTTPInput struct { retchan chan *work.Work prefix string port string } func NewHTTPInput(prefix, port string) *HTTPInput { return &HTTPInput{prefix: prefix, port: port} } func (hi *HTTPInput) httphandler(w http.ResponseWriter, r *http.Request) { if r.Method != "POST" { fmt.Printf("Expected POST method was: %q\n", r.Method) return } all, err := ioutil.ReadAll(r.Body) if err != nil { fmt.Printf("Error when reading HTTP request body: %q\n", err) return } hi.retchan <- &work.Work{Data: all} } func (hi *HTTPInput) Start() chan *work.Work { hi.retchan = make(chan *work.Work, 100) go func() { http.HandleFunc("/"+hi.prefix, hi.httphandler) err := http.ListenAndServe(hi.port, nil) fmt.Printf("Error when serving HTTP: %q\n", err) close(hi.retchan) }() return hi.retchan }