func (l *Listener) listenOnElements(example Ider) { defer func() { l.closeErrors() close(l.Tasks) }() typ := reflect.TypeOf(example) isPointer := false if typ.Kind() == reflect.Ptr { typ = typ.Elem() isPointer = true } for id := range l.l.Elements { task := reflect.New(typ).Interface() if err := l.rq.Storage.Get(id, task); err != nil { l.Errors <- errorcaller.Err(err) } else { if !isPointer { task = reflect.ValueOf(task).Elem().Interface() } l.Tasks <- task.(Ider) } } }
func (l *Listener) listenOnFinish() { defer l.closeErrors() for { select { case t, ok := <-l.Fail: if !ok { return } if err := l.rq.Fail(t); err != nil { l.Errors <- errorcaller.Err(err) } case t, ok := <-l.Finish: if !ok { return } if err := l.rq.Finish(t); err != nil { l.Errors <- errorcaller.Err(err) } } } }
func (l *Listener) listenOnElements() { defer func() { l.closeErrors() close(l.Tasks) }() for id := range l.l.Elements { if task, err := l.rq.Storage.Get(string(id)); err != nil { l.Errors <- errorcaller.Err(err) } else { l.Tasks <- task } } }
func (l *Listener) listen() { ListenLoop: for { select { case <-l.end: break ListenLoop // On end, we should stop listening default: } if el, err := l.call(); err != nil { l.Errors <- errorcaller.Err(err) } else if el != nil { l.Elements <- el } } l.close() }
func (l *Listener) listenOnError() { for err := range l.l.Errors { l.Errors <- errorcaller.Err(err) } l.closeErrors() }