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)); }
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; } } } }