func()

in nmxact/nmble/sync.go [100:155]


func (s *Syncer) listen() error {
	errChan := make(chan error)

	s.wg.Add(1)
	go func() {
		defer s.wg.Done()

		// Initial actions can cause an error to be returned.
		syncl, err := s.addSyncListener()
		if err != nil {
			errChan <- err
			close(errChan)
			return
		}
		defer s.x.RemoveListener(syncl)

		resetl, err := s.addResetListener()
		if err != nil {
			errChan <- err
			close(errChan)
			return
		}
		defer s.x.RemoveListener(resetl)

		// Initial actions complete.
		close(errChan)

		for {
			select {
			case <-syncl.ErrChan:
				// XXX
			case bm := <-syncl.MsgChan:
				switch msg := bm.(type) {
				case *BleSyncEvt:
					s.setSynced(msg.Synced)
				}

			case <-resetl.ErrChan:
				// XXX
			case bm := <-resetl.MsgChan:
				switch msg := bm.(type) {
				case *BleResetEvt:
					s.setSynced(false)
					s.resetCh <- msg.Reason
				}

			case <-s.stopCh:
				// It is OK to strand the two listeners.  Their deferred
				// removal will drain them.
				return
			}
		}
	}()

	return <-errChan
}