diff options
Diffstat (limited to 'Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs | 78 |
1 files changed, 52 insertions, 26 deletions
diff --git a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs index 6d9a987cb..30f2e9b0a 100644 --- a/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs +++ b/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs @@ -567,7 +567,7 @@ namespace Tango.Integration.Operation { _diagnosticsSent = false; - if (!(ex is ContinuousResponseAbortedException)) + if (!(ex is ContinuousResponseAbortedException) && !(ex is TransporterDisconnectedException)) { LogRequestFailed(request, ex); } @@ -630,7 +630,7 @@ namespace Tango.Integration.Operation { _eventsSent = false; - if (!(ex is ContinuousResponseAbortedException)) + if (!(ex is ContinuousResponseAbortedException) && !(ex is TransporterDisconnectedException)) { LogRequestFailed(request, ex); } @@ -695,7 +695,7 @@ namespace Tango.Integration.Operation { _debugSent = false; - if (!(ex is ContinuousResponseAbortedException)) + if (!(ex is ContinuousResponseAbortedException) && !(ex is TransporterDisconnectedException)) { LogRequestFailed(request, ex); } @@ -757,7 +757,7 @@ namespace Tango.Integration.Operation { _machineStatusSent = false; - if (!(ex is ContinuousResponseAbortedException)) + if (!(ex is ContinuousResponseAbortedException) && !(ex is TransporterDisconnectedException)) { LogRequestFailed(request, ex); } @@ -792,6 +792,10 @@ namespace Tango.Integration.Operation } } + /// <summary> + /// Called when the enable automatic thread loading has been changed + /// </summary> + /// <param name="value">if set to <c>true</c> [value].</param> protected virtual async void OnEnableAutomaticThreadLoadingChanged(bool value) { if (value && State == TransportComponentState.Connected && !_threadLoadingSent) @@ -816,7 +820,7 @@ namespace Tango.Integration.Operation { _threadLoadingSent = false; - if (!(ex is ContinuousResponseAbortedException)) + if (!(ex is ContinuousResponseAbortedException) && !(ex is TransporterDisconnectedException)) { LogRequestFailed(request, ex); } @@ -1154,6 +1158,8 @@ namespace Tango.Integration.Operation { if (Status == MachineStatuses.Upgrading) return; + Status = MachineStatuses.Disconnected; + if (State == TransportComponentState.Connected) { DisconnectRequest request = new DisconnectRequest(); @@ -1208,6 +1214,8 @@ namespace Tango.Integration.Operation var response = await SendRequest<ConnectRequest, ConnectResponse>(request); LogResponseReceived(response.Message); + _isPowerDownRequestInProgress = false; + if (Status != MachineStatuses.Upgrading) { Status = MachineStatuses.ReadyToDye; @@ -2260,7 +2268,7 @@ namespace Tango.Integration.Operation bool responseLogged = false; bool completed = false; //Use this in case Shlomo is sending progress after completion. - SendContinuousRequest<JobRequest, JobResponse>(request, null, ContinuousRequestTimeout).Subscribe((response) => + SendContinuousRequest<JobRequest, JobResponse>(request, null, ContinuousRequestTimeout.Add(TimeSpan.FromSeconds(3))).Subscribe((response) => { if (!completed) { @@ -2314,7 +2322,10 @@ namespace Tango.Integration.Operation if (!(ex is ContinuousResponseAbortedException)) { - Status = MachineStatuses.ReadyToDye; + if (Status != MachineStatuses.Disconnected) + { + Status = MachineStatuses.ReadyToDye; + } if (!handler.IsCanceled) { @@ -2326,7 +2337,10 @@ namespace Tango.Integration.Operation } else { - Status = MachineStatuses.ReadyToDye; + if (Status != MachineStatuses.Disconnected) + { + Status = MachineStatuses.ReadyToDye; + } } } }, () => @@ -3390,10 +3404,16 @@ namespace Tango.Integration.Operation /// <returns></returns> public Task<PowerDownHandler> PowerDown() { + if (_isPowerDownRequestInProgress) + { + throw new InvalidOperationException("Machine power down is already in progress."); + } + _isPowerDownRequestInProgress = true; PowerDownHandler handler = new PowerDownHandler(new Task(() => { + _isPowerDownRequestInProgress = false; Thread.Sleep(2000); var r = SendRequest<AbortPowerDownRequest, AbortPowerDownResponse>(new AbortPowerDownRequest()).Result; })); @@ -3404,25 +3424,31 @@ namespace Tango.Integration.Operation bool firstResponse = true; - SendContinuousRequest<StartPowerDownRequest, StartPowerDownResponse>(new StartPowerDownRequest()).ObserveOn(new NewThreadScheduler()).Subscribe((response) => - { - if (firstResponse) - { - firstResponse = false; - Status = MachineStatuses.ShuttingDown; - } + SendContinuousRequest<StartPowerDownRequest, StartPowerDownResponse>(new StartPowerDownRequest(), RequestTimeout, TimeSpan.FromSeconds(5)).ObserveOn(new NewThreadScheduler()).Subscribe((response) => + { + if (firstResponse) + { + firstResponse = false; + Status = MachineStatuses.ShuttingDown; + } - handler.RaiseStatusChanged(response); - }, (ex) => - { - _isPowerDownRequestInProgress = false; - LogManager.Log(ex, "Power down error."); - handler.RaiseFailed(ex); - }, () => - { - _isPowerDownRequestInProgress = false; - handler.RaiseCompleted(); - }); + handler.RaiseStatusChanged(response); + }, (ex) => + { + if (_isPowerDownRequestInProgress) + { + _isPowerDownRequestInProgress = false; + LogManager.Log(ex, "Power down error."); + handler.RaiseFailed(ex); + } + }, () => + { + if (_isPowerDownRequestInProgress) + { + _isPowerDownRequestInProgress = false; + handler.RaiseCompleted(); + } + }); }); PowerDownStarted?.Invoke(this, new PowerDownStartedEventArgs() |
