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()