code: func (r *Router) Start() error {
  	m := make(map[string]*bridge.Bridge)
  	for _, gw := range r.Gateways {
  		r.logger.Infof("Parsing gateway %s", gw.Name)
  		for _, br := range gw.Bridges {
  			m[br.Account] = br
  		}
  	}
  	for _, br := range m {
  		r.logger.Infof("Starting bridge: %s ", br.Account)
  		err := br.Connect()
  		if err != nil {
  			e := fmt.Errorf("Bridge %s failed to start: %v", br.Account, err)
  			if r.disableBridge(br, e) {
  				continue
  			}
  			return e
  		}
  		err = br.JoinChannels()
  		if err != nil {
  			e := fmt.Errorf("Bridge %s failed to join channel: %v", br.Account, err)
  			if r.disableBridge(br, e) {
  				continue
  			}
  			return e
  		}
  	}
  	// remove unused bridges
  	for _, gw := range r.Gateways {
  		for i, br := range gw.Bridges {
  			if br.Bridger == nil {
  				r.logger.Errorf("removing failed bridge %s", i)
  				delete(gw.Bridges, i)
  			}
  		}
  	}
  	go r.handleReceive()
  	//go r.updateChannelMembers()
  	return nil
  }
docs: // Start will connect all gateways belonging to this router and subsequently route messages
  // between them.