func()

in ptp/simpleclient/client.go [495:533]


func (c *Client) runInternal(skipSetup bool) error {
	ctx, cancel := context.WithTimeout(context.Background(), c.cfg.Timeout)
	defer cancel()
	eg, ctx := errgroup.WithContext(ctx)

	if !skipSetup {
		if err := c.setup(ctx, eg); err != nil {
			return err
		}
	}

	eg.Go(func() error {
		for {
			select {
			case <-ctx.Done():
				log.Debugf("cancelled main loop")
				return ctx.Err()
			case msg := <-c.inChan:
				if err := c.handleMsg(msg); err != nil {
					return err
				}
			default:
				switch c.state {
				case stateInit:
					seq, err := c.sendGeneralMsg(reqUnicast(c.clockID, c.cfg.Duration, ptp.MessageAnnounce))
					if err != nil {
						return err
					}
					c.logSent(ptp.MessageSignaling, "for %s, seq=%d", ptp.MessageAnnounce, seq)
					time.Sleep(time.Second)
				case stateDone:
					cancel()
					return nil
				}
			}
		}
	})
	return eg.Wait()
}