code: func (pc *ProtoClient) LoadServerInfo(addr string) error {
  	pc.ready = false
  
  	if err := pc.Client.ConnectToTLS(addr, true); err != nil {
  		if err.Error() == "EOF" {
  			if err := pc.Client.ConnectTo(addr); err != nil {
  				return err
  			}
  		} else {
  			return err
  		}
  	}
  
  	// request doc info
  	_, err := pc.SendRequest(pc.docsRoute, make([]byte, 0))
  	if err != nil {
  		return err
  	}
  	response := <-pc.Client.IncomingMsgChan
  
  	docs := &protos.Doc{}
  	if err := proto.Unmarshal(response.Data, docs); err != nil {
  		return err
  	}
  
  	if err := pc.getDescriptors(docs.Doc); err != nil {
  		return err
  	}
  
  	pc.Disconnect()
  	pc.ready = true
  
  	return nil
  }
docs: // LoadServerInfo load commands information from the server. Addr is the
  // server address.