code: func newGRPCClient(doneCtx context.Context, c *Client) (*GRPCClient, error) {
  	conn, err := dialGRPCConn(c.config.TLSConfig, c.dialer)
  	if err != nil {
  		return nil, err
  	}
  
  	// Start the broker.
  	brokerGRPCClient := newGRPCBrokerClient(conn)
  	broker := newGRPCBroker(brokerGRPCClient, c.config.TLSConfig)
  	go broker.Run()
  	go brokerGRPCClient.StartStream()
  
  	cl := &GRPCClient{
  		Conn:       conn,
  		Plugins:    c.config.Plugins,
  		doneCtx:    doneCtx,
  		broker:     broker,
  		controller: plugin.NewGRPCControllerClient(conn),
  	}
  
  	return cl, nil
  }
docs: // newGRPCClient creates a new GRPCClient. The Client argument is expected
  // to be successfully started already with a lock held.