From 99716cc414f211fd7ef48722708b1bf6748f6eab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C4=90=C4=83ng=20Nguy=E1=BB=85n?= Date: Thu, 6 Nov 2025 09:22:55 +0700 Subject: [PATCH] update --- RobotApp/Components/Pages/Home.razor | 2 +- RobotApp/Properties/launchSettings.json | 2 +- RobotApp/Services/MQTTClient.cs | 16 ++++++++-------- RobotApp/Services/Robot/Actions/RobotAction.cs | 5 ++++- RobotApp/Services/Robot/RobotActionController.cs | 4 ++-- RobotApp/Services/Robot/RobotOrderController.cs | 2 ++ RobotApp/Services/Robot/RobotStates.cs | 3 +-- RobotApp/Services/Robot/RobotVisualization.cs | 3 +-- 8 files changed, 20 insertions(+), 17 deletions(-) diff --git a/RobotApp/Components/Pages/Home.razor b/RobotApp/Components/Pages/Home.razor index 0e760a6..8210272 100644 --- a/RobotApp/Components/Pages/Home.razor +++ b/RobotApp/Components/Pages/Home.razor @@ -4,4 +4,4 @@ @rendermode InteractiveServer @attribute [Authorize] -

Welcome to RobotApp!

+@*

Welcome to RobotApp!

*@ diff --git a/RobotApp/Properties/launchSettings.json b/RobotApp/Properties/launchSettings.json index 19731fb..21714dc 100644 --- a/RobotApp/Properties/launchSettings.json +++ b/RobotApp/Properties/launchSettings.json @@ -18,7 +18,7 @@ "launchBrowser": true, "workingDirectory": "$(TargetDir)", "inspectUri": "{wsProtocol}://{url.hostname}:{url.port}/_framework/debug/ws-proxy?browser={browserInspectUri}", - "applicationUrl": "https://localhost:7150;http://localhost:5229", + "applicationUrl": "https://0.0.0.0:7150;http://localhost:5229", "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } diff --git a/RobotApp/Services/MQTTClient.cs b/RobotApp/Services/MQTTClient.cs index b5be783..8671407 100644 --- a/RobotApp/Services/MQTTClient.cs +++ b/RobotApp/Services/MQTTClient.cs @@ -191,11 +191,11 @@ public class MQTTClient : IAsyncDisposable if (isValid) { - Console.WriteLine("[BROKER] CLIENT CERTIFICATE VALID"); + Console.WriteLine("Broker CERTIFICATE VALID"); } else { - Console.WriteLine("[BROKER] CLIENT CERTIFICATE INVALID"); + Console.WriteLine("Broker CERTIFICATE INVALID"); foreach (var status in arg.Chain.ChainStatus) Console.WriteLine($" -> Chain error: {status.Status} - {status.StatusInformation}"); } @@ -222,7 +222,7 @@ public class MQTTClient : IAsyncDisposable { var tlsOptions = new MqttClientTlsOptionsBuilder() .UseTls(true) - .WithSslProtocols(System.Security.Authentication.SslProtocols.Tls12) + .WithSslProtocols(System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls13) .WithCertificateValidationHandler(ValidateCertificates) .WithClientCertificatesProvider(new MQTTClientCertificatesProvider(VDA5050Setting.CerFile, VDA5050Setting.KeyFile)) .Build(); @@ -304,11 +304,11 @@ public class MQTTClient : IAsyncDisposable { try { - var applicationMessage = new MqttApplicationMessageBuilder() - .WithTopic(topic) - .WithPayload(data) - .WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce) - .Build(); + var applicationMessage = MqttClientFactory.CreateApplicationMessageBuilder() + .WithTopic(topic) + .WithPayload(data) + .WithQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce) + .Build(); if (MqttClient is null || !IsConnected) return new(false, "Chưa có kết nối tới broker"); var publish = await MqttClient.PublishAsync(applicationMessage); if (!publish.IsSuccess) continue; diff --git a/RobotApp/Services/Robot/Actions/RobotAction.cs b/RobotApp/Services/Robot/Actions/RobotAction.cs index fa42d4c..673b3d1 100644 --- a/RobotApp/Services/Robot/Actions/RobotAction.cs +++ b/RobotApp/Services/Robot/Actions/RobotAction.cs @@ -59,6 +59,7 @@ public abstract class RobotAction(IServiceProvider serviceProvider) : IDisposabl { HistoryStatus = Status; Status = ActionStatus.PAUSED; + IsPaused = true; } public void Resume() @@ -68,7 +69,8 @@ public abstract class RobotAction(IServiceProvider serviceProvider) : IDisposabl public void Cancel() { - if(!IsCompleted) IsCancelAction = true; + if (!IsCompleted) IsCancelAction = true; + if (Status == ActionStatus.WAITING) StopAction(); } public async Task WaitAsync(CancellationToken cancellationToken) @@ -94,6 +96,7 @@ public abstract class RobotAction(IServiceProvider serviceProvider) : IDisposabl protected virtual Task StopAction() { + Console.WriteLine($"StopAction {Type}"); Status = ActionStatus.FAILED; ResultDescription = "Action bị hủy bỏ."; return Task.CompletedTask; diff --git a/RobotApp/Services/Robot/RobotActionController.cs b/RobotApp/Services/Robot/RobotActionController.cs index 1271439..455f08f 100644 --- a/RobotApp/Services/Robot/RobotActionController.cs +++ b/RobotApp/Services/Robot/RobotActionController.cs @@ -18,7 +18,7 @@ public class RobotActionController(Logger Logger, RobotAc ActionStatus = a.Status.ToString(), ResultDescription = a.ResultDescription, })]; - public bool HasActionRunning => !ActionQueue.IsEmpty || Actions.Values.Any(a => !a.IsCompleted); + public bool HasActionRunning => !ActionQueue.IsEmpty || Actions.Values.Any(a => a.Type != ActionType.cancelOrder && !a.IsCompleted); private readonly Dictionary Actions = []; private readonly ConcurrentQueue<(ActionScopes scope, VDA5050.InstantAction.Action action)> ActionQueue = []; @@ -62,7 +62,7 @@ public class RobotActionController(Logger Logger, RobotAc { foreach (var action in Actions.Values) { - if (!action.IsCompleted) action.Cancel(); + if (!action.IsCompleted && action.Type != ActionType.cancelOrder) action.Cancel(); } } else if (Actions.TryGetValue(actionId, out RobotAction? robotAction) && robotAction is not null) robotAction.Cancel(); diff --git a/RobotApp/Services/Robot/RobotOrderController.cs b/RobotApp/Services/Robot/RobotOrderController.cs index d7e2bf8..7702f5a 100644 --- a/RobotApp/Services/Robot/RobotOrderController.cs +++ b/RobotApp/Services/Robot/RobotOrderController.cs @@ -6,6 +6,7 @@ using RobotApp.VDA5050.InstantAction; using RobotApp.VDA5050.Order; using RobotApp.VDA5050.State; using System.Collections.Concurrent; +using System.Data; using Action = RobotApp.VDA5050.InstantAction.Action; namespace RobotApp.Services.Robot; @@ -111,6 +112,7 @@ public class RobotOrderController(INavigation NavigationManager, CurrentBaseNode = null; Nodes = []; Edges = []; + UpdateState(); StateManager.TransitionTo(AutoStateType.Idle); } diff --git a/RobotApp/Services/Robot/RobotStates.cs b/RobotApp/Services/Robot/RobotStates.cs index 91a7513..4b4192e 100644 --- a/RobotApp/Services/Robot/RobotStates.cs +++ b/RobotApp/Services/Robot/RobotStates.cs @@ -23,7 +23,6 @@ public class RobotStates(RobotConfiguration RobotConfiguration, IDriver DriverManager) : BackgroundService { private uint HeaderId = 0; - private readonly string SerialNumber = RobotConfiguration.SerialNumber; private WatchTimerAsync? UpdateStateTimer; private const int UpdateStateInterval = 1000; @@ -42,7 +41,7 @@ public class RobotStates(RobotConfiguration RobotConfiguration, return new StateMsg { HeaderId = HeaderId++, - SerialNumber = SerialNumber, + SerialNumber = RobotConfiguration.SerialNumber, Maps = [], OrderId = OrderManager.OrderId, OrderUpdateId = OrderManager.OrderUpdateId, diff --git a/RobotApp/Services/Robot/RobotVisualization.cs b/RobotApp/Services/Robot/RobotVisualization.cs index 0fd388b..1f958ac 100644 --- a/RobotApp/Services/Robot/RobotVisualization.cs +++ b/RobotApp/Services/Robot/RobotVisualization.cs @@ -7,7 +7,6 @@ namespace RobotApp.Services.Robot; public class RobotVisualization(ILocalization Localization, INavigation Navigation, RobotConfiguration RobotConfiguration, RobotConnection RobotConnection, Logger Logger) : BackgroundService { - public string SerialNumber = RobotConfiguration.SerialNumber; private uint HeaderId; private WatchTimerAsync? UpdateTimer; @@ -17,7 +16,7 @@ public class RobotVisualization(ILocalization Localization, INavigation Navigati return new VisualizationMsg() { HeaderId = HeaderId++, - SerialNumber = SerialNumber, + SerialNumber = RobotConfiguration.SerialNumber, MapId = Localization.CurrentActiveMap, MapDescription = string.Empty, AgvPosition = new AgvPosition()