Browse Source

Merge pull request #799 from gravitl/feature_v0.11.0_random_comms_client

Feature v0.11.0 random comms client
Alex Feiszli 3 years ago
parent
commit
b2f98e9278

+ 1 - 1
netclient/command/commands.go

@@ -27,7 +27,7 @@ func Join(cfg config.ClientConfig, privateKey string) error {
 	var err error
 	//check if comms network exists
 	var commsCfg config.ClientConfig
-	commsCfg.Network = ncutils.COMMS_NETWORK_NAME
+	commsCfg.Network = cfg.Server.CommsNetwork
 	commsCfg.ReadConfig()
 	if commsCfg.Node.Name == "" {
 		if err := JoinCommsNetwork(commsCfg); err != nil {

+ 6 - 4
netclient/config/config.go

@@ -28,10 +28,11 @@ type ClientConfig struct {
 
 // ServerConfig - struct for dealing with the server information for a netclient
 type ServerConfig struct {
-	CoreDNSAddr string `yaml:"corednsaddr"`
-	GRPCAddress string `yaml:"grpcaddress"`
-	AccessKey   string `yaml:"accesskey"`
-	GRPCSSL     string `yaml:"grpcssl"`
+	CoreDNSAddr  string `yaml:"corednsaddr"`
+	GRPCAddress  string `yaml:"grpcaddress"`
+	AccessKey    string `yaml:"accesskey"`
+	GRPCSSL      string `yaml:"grpcssl"`
+	CommsNetwork string `yaml:"commsnetwork"`
 }
 
 // Write - writes the config of a client to disk
@@ -175,6 +176,7 @@ func GetCLIConfig(c *cli.Context) (ClientConfig, string, error) {
 		cfg.Server.AccessKey = accesstoken.ClientConfig.Key
 		cfg.Node.LocalRange = accesstoken.ClientConfig.LocalRange
 		cfg.Server.GRPCSSL = accesstoken.ServerConfig.GRPCSSL
+		cfg.Server.CommsNetwork = accesstoken.ServerConfig.CommsNetwork
 		if c.String("grpcserver") != "" {
 			cfg.Server.GRPCAddress = c.String("grpcserver")
 		}

+ 27 - 11
netclient/functions/daemon.go

@@ -35,8 +35,15 @@ type cachedMessage struct {
 
 // Daemon runs netclient daemon from command line
 func Daemon() error {
-	client := setupMQTT(false)
-	defer client.Disconnect(250)
+	commsNetworks, err := getCommsNetworks()
+	if err != nil {
+		return errors.New("no comm networks exist")
+	}
+	for net := range commsNetworks {
+		ncutils.PrintLog("started comms network daemon, "+net, 1)
+		client := setupMQTT(false, net)
+		defer client.Disconnect(250)
+	}
 	wg := sync.WaitGroup{}
 	ctx, cancel := context.WithCancel(context.Background())
 	networks, _ := ncutils.GetSystemNetworks()
@@ -102,13 +109,13 @@ func PingServer(cfg *config.ClientConfig) error {
 // == Private ==
 
 // setupMQTT creates a connection to broker and return client
-func setupMQTT(publish bool) mqtt.Client {
+func setupMQTT(publish bool, networkName string) mqtt.Client {
 	var cfg *config.ClientConfig
-	cfg.Network = ncutils.COMMS_NETWORK_NAME
+	cfg.Network = networkName
 	cfg.ReadConfig()
 	opts := mqtt.NewClientOptions()
 	server := getServerAddress(cfg)
-	opts.AddBroker(server + ":1883")
+	opts.AddBroker(server + ":1883") // TODO get the appropriate port of the comms mq server
 	id := ncutils.MakeRandomString(23)
 	opts.ClientID = id
 	opts.SetDefaultPublishHandler(All)
@@ -130,12 +137,6 @@ func setupMQTT(publish bool) mqtt.Client {
 		if err != nil {
 			ncutils.Log("could not run pull, server unreachable: " + err.Error())
 			ncutils.Log("waiting to retry...")
-			/*
-				//Consider putting in logic to restart - daemon may take long time to refresh
-				time.Sleep(time.Minute * 5)
-					ncutils.Log("restarting netclient")
-					daemon.Restart()
-			*/
 		}
 		ncutils.Log("connection re-established with mqtt server")
 	})
@@ -276,6 +277,21 @@ func getServerAddress(cfg *config.ClientConfig) string {
 	return server.Address
 }
 
+func getCommsNetworks() (map[string]bool, error) {
+	var cfg config.ClientConfig
+	networks, err := ncutils.GetSystemNetworks()
+	if err != nil {
+		return nil, err
+	}
+	var response = make(map[string]bool, 1)
+	for _, network := range networks {
+		cfg.Network = network
+		cfg.ReadConfig()
+		response[cfg.Node.CommID] = true
+	}
+	return response, nil
+}
+
 // == Message Caches ==
 
 func insert(network, which, cache string) {

+ 1 - 1
netclient/functions/mqpublish.go

@@ -121,7 +121,7 @@ func publish(cfg *config.ClientConfig, dest string, msg []byte, qos byte) error
 		return err
 	}
 
-	client := setupMQTT(true)
+	client := setupMQTT(true, cfg.Node.CommID)
 	defer client.Disconnect(250)
 	encrypted, err := ncutils.Chunk(msg, serverPubKey, trafficPrivKey)
 	if err != nil {