public static void PushDataToHost(HostChannel channel, PayloadRoot payload) { switch (payload.Version.FormatFirstCapitalized()) { case nameof(HostTransaction.Eai): ContactBuilder(new EaiLauncher(), payload, channel); break; case nameof(HostTransaction.Smes): ContactBuilder(new MesLauncher(), payload, channel); break; default: ContactBuilder(new MqttLauncher(), payload, channel); break; } }
public override async Task SendAsync(PayloadRoot payload, HostChannel channel) { if (channel == HostChannel.Undefined || payload.Row.Count == 0) { return; } string clientId = null, topic = null; switch (channel) { case HostChannel.Status: clientId = payload.MachineNo + "#" + nameof(HostChannel.Status); topic = $"/{nameof(HostTransaction.Smmp).ToLower()}/{payload.MachineNo}/{nameof(WorkTasks.Collection).ToLower()}/{nameof(HostChannel.Status).ToLower()}"; break; case HostChannel.Parameter: clientId = payload.MachineNo + "#" + nameof(HostChannel.Parameter); topic = $"/{nameof(HostTransaction.Smmp).ToLower()}/{payload.MachineNo}/{nameof(WorkTasks.Collection).ToLower()}/{nameof(HostChannel.Parameter).ToLower()}"; break; case HostChannel.Production: clientId = payload.MachineNo + "#" + nameof(HostChannel.Production); topic = $"/{nameof(HostTransaction.Smmp).ToLower()}/{payload.MachineNo}/{nameof(WorkTasks.Collection).ToLower()}/{nameof(HostChannel.Production).ToLower()}"; break; } payload.Row.ForEach(c => { if (YamlBase.Propertie.Debug) { Console.WriteLine($"[{DateTime.Now:MM/dd HH:mm ss}] ModbusTCP => NO.{payload.MachineNo} - {c.AttribNo}:{c.AttribValue}"); } }); try { FoundationProvider box = new(); IConfigurationBuilder builder = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("appsettings.json"); IConfigurationRoot config = builder.Build(); IMqttClient client = new MqttFactory().CreateMqttClient(); await client.ConnectAsync(new MqttClientOptionsBuilder() .WithTcpServer(box.FoundationBasic.Server.Address.Split('/')[2].Split(':')[0], box.FoundationBasic.Server.MqttPort) .WithCredentials(config.GetValue <string>("Server:Account"), config.GetValue <string>("Server:Password")) .WithClientId(clientId) .Build()); await client.PublishAsync(new MqttApplicationMessageBuilder() .WithTopic(topic) .WithPayload(JsonConvert.SerializeObject(payload)) .WithExactlyOnceQoS() .WithRetainFlag() .Build()); await client.DisconnectAsync(); client.Dispose(); } catch (Exception e) { LogBuilder.WriteLog(LogEventLevel.Error, "MQTT Server => " + e.Message); } }
private static void PushHost(BaseStationFactory factory, PayloadRoot root, HostChannel channel) => factory.SendAsync(root, channel);
public override async Task SendAsync(PayloadRoot root, HostChannel channel) { try { if (channel == HostChannel.Undefined || root.Row.Count == 0) { return; } FoundationProvider provider = new(); GlobalVariables variables = new(); XElement xHost = new("host"); xHost.Add(new XAttribute("prod", provider.FoundationBasic.Eai.Host.Name)); xHost.Add(new XAttribute("ver", provider.FoundationBasic.Eai.Host.Version)); xHost.Add(new XAttribute("ip", GeneralTools.GetLocalIP())); xHost.Add(new XAttribute("id", provider.FoundationBasic.Eai.Host.Id)); xHost.Add(new XAttribute("acct", provider.FoundationBasic.Eai.Host.Account)); xHost.Add(new XAttribute("lang", provider.FoundationBasic.Eai.Host.Language)); xHost.Add(new XAttribute("timestamp", DateTime.Now.ToString(("yyyyMMddHHmmssfff")))); XElement service = new("service"); service.Add(new XAttribute("prod", provider.FoundationBasic.Eai.Service.Name)); service.Add(new XAttribute("name", channel switch { HostChannel.Status => "change.machine.status.process", HostChannel.Parameter => "parameter.check.process", HostChannel.Production => "production.edc.process", _ => "" })); service.Add(new XAttribute("srvver", provider.FoundationBasic.Eai.Service.Srvver)); service.Add(new XAttribute("ip", provider.FoundationBasic.Eai.Service.Ip)); service.Add(new XAttribute("id", provider.FoundationBasic.Eai.Service.Id)); XElement xRoot = new XElement("request"); xRoot.Add(new XAttribute("key", (xHost.ToString() + service.ToString()).ToMD5())); xRoot.Add(new XAttribute("type", "sync")); xRoot.Add(xHost); xRoot.Add(service); XElement xPayload = new("payload"); XElement xParam = new("param"); xParam.Add(new XAttribute("key", "std_data")); xParam.Add(new XAttribute("type", "xml")); xPayload.Add(xParam); XElement xDataRequest = new("data_request"); xParam.Add(xDataRequest); XElement xDatainfo = new("datainfo"); xDataRequest.Add(xDatainfo); XElement xParameter = new("parameter"); xParameter.Add(new XAttribute("key", channel switch { HostChannel.Status => "change_machine_status", HostChannel.Parameter => "parameter_check", HostChannel.Production => "production_edc", _ => "" }));
public abstract Task SendAsync(PayloadRoot root, HostChannel channel);