Files
diun/internal/app/dispatcher.go
2019-06-09 19:43:48 +02:00

49 lines
750 B
Go

package app
type Collector struct {
Job chan Job
end chan bool
}
var workerChannel = make(chan chan Job)
func (di *Diun) StartDispatcher(workerCount int) Collector {
var i int
var workers []worker
input := make(chan Job)
end := make(chan bool)
collector := Collector{
Job: input,
end: end,
}
for i < workerCount {
i++
worker := worker{
diun: di,
workerPool: workerChannel,
jobChannel: make(chan Job),
end: make(chan bool),
}
worker.Start()
workers = append(workers, worker)
}
go func() {
for {
select {
case <-end:
for _, w := range workers {
w.Stop()
}
return
case work := <-input:
worker := <-workerChannel
worker <- work
}
}
}()
return collector
}