Exemplo n.º 1
0
        public virtual async Task <ReqResult> OnUiRequestAsync(string command, DataValue parameters)
        {
            if (mapUiReqMethods.ContainsKey(command))
            {
                UiReqMethod method = mapUiReqMethods[command];
                method.ResetValues();

                JObject obj = StdJson.JObjectFromString(parameters.JSON);
                foreach (JProperty p in obj.Properties())
                {
                    if (method.ParameterMap.ContainsKey(p.Name))
                    {
                        UiReqPara para = method.ParameterMap[p.Name];
                        para.Value = p.Value.ToObject(para.Type);
                    }
                }

                object?[] paramValues = method.Parameters.Select(p => p.Value).ToArray();
                return(await method.TheDelegate(paramValues));
            }

            return(ReqResult.Bad("Unknown command: " + command));
        }
Exemplo n.º 2
0
        public override async Task Run(Func <bool> shutdown)
        {
            var mapConfigVar = new Dictionary <string, string>();

            string configVarFile = info.GetConfigReader().GetOptionalString("config-var-file", "").Trim();

            if (configVarFile != "")
            {
                if (!File.Exists(configVarFile))
                {
                    Console.WriteLine($"config-var-file '{configVarFile}' not found!");
                }
                else
                {
                    string vars      = File.ReadAllText(configVarFile, System.Text.Encoding.UTF8);
                    var    variables = StdJson.JObjectFromString(vars);
                    Console.WriteLine($"Using variables as specified in config-var-file '{configVarFile}':");
                    foreach (var prop in variables.Properties())
                    {
                        string key = "${" + prop.Name + "}";
                        mapConfigVar[key] = prop.Value.ToString();
                        Console.WriteLine($"{prop.Name} -> {prop.Value}");
                    }
                }
            }

            model.ApplyVarConfig(mapConfigVar);

            string certDir = info.GetConfigReader().GetOptionalString("cert-dir", ".");
            var    tasks   = new List <Task>();

            Task[] tasksVarPub = model.MQTT
                                 .Where(mqtt => mqtt.VarPublish != null)
                                 .Select(mqtt => MqttPublisher.MakeVarPubTask(mqtt, info, certDir, shutdown))
                                 .ToArray();

            tasks.AddRange(tasksVarPub);

            Task[] tasksConfigPub = model.MQTT
                                    .Where(mqtt => mqtt.ConfigPublish != null)
                                    .Select(mqtt => MqttPublisher.MakeConfigPubTask(mqtt, info, certDir, shutdown))
                                    .ToArray();

            tasks.AddRange(tasksConfigPub);

            Task[] tasksVarRec = model.MQTT
                                 .Where(mqtt => mqtt.VarReceive != null)
                                 .Select(mqtt => MqttPublisher.MakeVarRecTask(mqtt, info, certDir, shutdown))
                                 .ToArray();

            tasks.AddRange(tasksVarRec);

            Task[] tasksConfigRec = model.MQTT
                                    .Where(mqtt => mqtt.ConfigReceive != null)
                                    .Select(mqtt => MqttPublisher.MakeConfigRecTask(mqtt, info, certDir, shutdown))
                                    .ToArray();

            tasks.AddRange(tasksConfigRec);

            Task[] tasksMethodPub = model.MQTT
                                    .Where(mqtt => mqtt.MethodPublish != null)
                                    .Select(mqtt => MqttPublisher.MakeMethodPubTask(mqtt, info, certDir, shutdown))
                                    .ToArray();

            tasks.AddRange(tasksMethodPub);

            if (tasks.Count == 0)
            {
                while (!shutdown())
                {
                    await Task.Delay(100);
                }
            }
            else
            {
                try {
                    await Task.WhenAll(tasks);
                }
                catch (Exception exp) {
                    if (!shutdown())
                    {
                        Exception e = exp.GetBaseException() ?? exp;
                        Console.Error.WriteLine($"Run: {e.GetType().FullName} {e.Message}");
                        return;
                    }
                }
            }
        }