From 8f738753289dcb7118162122c5404d2a02b305f7 Mon Sep 17 00:00:00 2001 From: Roy Ben Shabat Date: Tue, 14 Apr 2020 06:23:25 +0300 Subject: FSE Tup/Tfp & WaitForReconnection. --- .../Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs | 131 +++++++++++++++++++-- 1 file changed, 123 insertions(+), 8 deletions(-) (limited to 'Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels') diff --git a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs index 8a8b87c97..9a8c79cd9 100644 --- a/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs +++ b/Software/Visual_Studio/PPC/Tango.PPC.UI/ViewModels/MachineUpdateViewVM.cs @@ -8,6 +8,7 @@ using System.Text; using System.Threading; using System.Threading.Tasks; using Tango.BL; +using Tango.Core; using Tango.Core.Commands; using Tango.Core.ExtensionMethods; using Tango.Core.Helpers; @@ -24,6 +25,7 @@ using Tango.PPC.Shared.RemoteUpgrade; using Tango.PPC.UI.Dialogs; using Tango.PPC.UI.Notifications.NotificationItems; using Tango.PPC.UI.ViewsContracts; +using Tango.Transport; namespace Tango.PPC.UI.ViewModels { @@ -549,10 +551,10 @@ namespace Tango.PPC.UI.ViewModels #region External Bridge Handler - [ExternalBridgeRequestHandlerMethod(typeof(StartRemoteApplicationRemoteUpgradeRequest), RequestHandlerLoggingMode.LogRequestName)] - public async Task OnStartRemoteApplicationRemoteUpgradeRequest(StartRemoteApplicationRemoteUpgradeRequest request, String token, ExternalBridgeReceiver receiver) + [ExternalBridgeRequestHandlerMethod(typeof(StartRemoteApplicationUpgradeRequest), RequestHandlerLoggingMode.LogRequestName)] + public async Task OnStartRemoteApplicationUpgradeRequest(StartRemoteApplicationUpgradeRequest request, String token, ExternalBridgeReceiver receiver) { - await receiver.SendGenericResponse(new StartRemoteApplicationRemoteUpgradeResponse(), token); + await receiver.SendGenericResponse(new StartRemoteApplicationUpgradeResponse(), token); bool stopReporting = false; @@ -566,13 +568,13 @@ namespace Tango.PPC.UI.ViewModels { try { - await receiver.SendGenericResponse(new StartRemoteApplicationRemoteUpgradeResponse() + await receiver.SendGenericResponse(new StartRemoteApplicationUpgradeResponse() { Message = MachineUpdateManager.Status.Message, IsIndeterminate = MachineUpdateManager.Status.IsIntermediate, Maximum = MachineUpdateManager.Status.Total, Progress = MachineUpdateManager.Status.Progress - }, token); + }, token, new TransportResponseConfig() { Priority = QueuePriority.Low }); } catch (Exception ex) { @@ -613,16 +615,26 @@ namespace Tango.PPC.UI.ViewModels }); } - await receiver.SendGenericResponse(new StartRemoteApplicationRemoteUpgradeResponse() + await receiver.SendGenericResponse(new StartRemoteApplicationUpgradeResponse() { IsIndeterminate = false, Maximum = 100, Progress = 100, Message = "Completed" - }, token, new Transport.TransportResponseConfig() + }, token, new TransportResponseConfig() { Completed = true }); + + try + { + File.Delete(request.RemoteTupFilePath); + } + catch { } + + await Task.Delay(2000); + + CompleteUpdate(); } catch (Exception ex) { @@ -638,9 +650,112 @@ namespace Tango.PPC.UI.ViewModels } } - public void OnReceiverDisconnected(ExternalBridgeReceiver receiver) + [ExternalBridgeRequestHandlerMethod(typeof(StartRemoteFirmwareUpgradeRequest), RequestHandlerLoggingMode.LogRequestName)] + public async Task OnStartRemoteFirmwareUpgradeRequest(StartRemoteFirmwareUpgradeRequest request, String token, ExternalBridgeReceiver receiver) { + await receiver.SendGenericResponse(new StartRemoteFirmwareUpgradeResponse(), token); + + bool stopReporting = false; + + try + { + ThreadFactory.StartNew(async () => + { + while (!stopReporting) + { + if (MachineUpdateManager.Status != null) + { + try + { + await receiver.SendGenericResponse(new StartRemoteFirmwareUpgradeResponse() + { + Message = MachineUpdateManager.Status.Message, + IsIndeterminate = MachineUpdateManager.Status.IsIntermediate, + Maximum = MachineUpdateManager.Status.Total, + Progress = MachineUpdateManager.Status.Progress + }, token, new TransportResponseConfig() { Priority = QueuePriority.Low }); + } + catch (Exception ex) + { + LogManager.Log(ex, "Error sending remote upgrade progress."); + } + } + + Thread.Sleep(500); + } + }); + + InvokeUI(() => + { + NavigationManager.NavigateTo(Common.Navigation.NavigationView.MachineUpdateView); + NavigateTo(MachineUpdateView.UpdateProgressView); + }); + + LogManager.Log("Starting firmware upgrade from package..."); + + try + { + await MachineUpdateManager.UpdateFromTFP(request.RemoteTfpFilePath); + LogManager.Log("Firmware upgrade from package completed."); + _update_result = new MachineUpdateResult() + { + RequiresBinariesUpdate = false, + }; + + InvokeUI(() => + { + NavigateTo(MachineUpdateView.UpdateCompletedView); + }); + } + catch (Exception ex) + { + LogManager.Log(ex, "Firmware upgrade from package failed."); + FailedError = ex.FlattenMessage(); + InvokeUI(() => + { + NavigateTo(MachineUpdateView.UpdateFailedFromPackageView); + }); + } + + await receiver.SendGenericResponse(new StartRemoteFirmwareUpgradeResponse() + { + IsIndeterminate = false, + Maximum = 100, + Progress = 100, + Message = "Completed" + }, token, new TransportResponseConfig() + { + Completed = true + }); + + try + { + File.Delete(request.RemoteTfpFilePath); + } + catch { } + + await Task.Delay(2000); + + CompleteUpdate(); + } + catch (Exception ex) + { + await receiver.SendErrorResponse(ex, token); + } + finally + { + try + { + File.Delete(request.RemoteTfpFilePath); + } + catch { } + } + } + + public void OnReceiverDisconnected(ExternalBridgeReceiver receiver) + { + //Do Nothing. } #endregion -- cgit v1.3.1