aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs')
-rw-r--r--Software/Visual_Studio/Tango.Integration/Operation/MachineOperator.cs78
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()