コード例 #1
0
ファイル: listener.go プロジェクト: Rafflecopter/golang-relyq
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)
		}
	}
}
コード例 #2
0
ファイル: listener.go プロジェクト: pombredanne/golang-relyq
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)
			}
		}
	}
}
コード例 #3
0
ファイル: listener.go プロジェクト: pombredanne/golang-relyq
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
		}
	}
}
コード例 #4
0
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()
}
コード例 #5
0
ファイル: listener.go プロジェクト: pombredanne/golang-relyq
func (l *Listener) listenOnError() {
	for err := range l.l.Errors {
		l.Errors <- errorcaller.Err(err)
	}
	l.closeErrors()
}