code: func (k *Kite) Register(kiteURL *url.URL) (*registerResult, error) {
  	if err := k.SetupKontrolClient(); err != nil {
  		return nil, err
  	}
  
  	<-k.kontrol.readyConnected
  
  	args := protocol.RegisterArgs{
  		URL: kiteURL.String(),
  	}
  
  	k.Log.Info("Registering to kontrol with URL: %s", kiteURL.String())
  
  	response, err := k.kontrol.TellWithTimeout("register", k.Config.Timeout, args)
  	if err != nil {
  		return nil, err
  	}
  
  	var rr protocol.RegisterResult
  	err = response.Unmarshal(&rr)
  	if err != nil {
  		return nil, err
  	}
  
  	k.Log.Info("Registered to kontrol with URL: %s and Kite query: %s",
  		rr.URL, k.Kite())
  
  	parsed, err := url.Parse(rr.URL)
  	if err != nil {
  		k.Log.Error("Cannot parse registered URL: %s", err)
  	}
  
  	k.callOnRegisterHandlers(&rr)
  
  	return &registerResult{parsed}, nil
  }
docs: // Register registers current Kite to Kontrol. After registration other Kites
  // can find it via GetKites() or WatchKites() method.  This method does not
  // handle the reconnection case. If you want to keep registered to kontrol, use
  // RegisterForever().