func handler() { jobs := make(map[string]*Job) for { var m batt.Message select { case <-time.After(nopDelay): out <- batt.Message{Verb: "nop"} continue case m = <-in: } if m.Verb == "nop" { continue // ignore } log.Println("received:", m) switch m.Verb { case "build": h := m.Get("h") j := NewJob(h) jobs[h] = j go j.Build(m.Get("path"), m.Get("platform")) case "accept": h := m.Get("h") j, ok := jobs[h] if !ok { log.Printf("unknown job %q", h) break } delete(jobs, h) go j.Accept(m.Get("url")) default: log.Printf("unknown verb %q", m.Verb) } } }