aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Transport/TransportMessage.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Tango.Transport/TransportMessage.cs')
-rw-r--r--Software/Visual_Studio/Tango.Transport/TransportMessage.cs95
1 files changed, 8 insertions, 87 deletions
diff --git a/Software/Visual_Studio/Tango.Transport/TransportMessage.cs b/Software/Visual_Studio/Tango.Transport/TransportMessage.cs
index 245619e5e..73bf3b1e0 100644
--- a/Software/Visual_Studio/Tango.Transport/TransportMessage.cs
+++ b/Software/Visual_Studio/Tango.Transport/TransportMessage.cs
@@ -5,12 +5,9 @@ using System.Linq;
using System.Reactive.Subjects;
using System.Text;
using System.Threading.Tasks;
-using Tango.Core.ExtensionMethods;
-using Tango.Core.Threading;
using Tango.Logging;
using Tango.PMR;
using Tango.PMR.Common;
-using Tango.PMR.Integration;
namespace Tango.Transport
{
@@ -21,13 +18,12 @@ namespace Tango.Transport
/// <seealso cref="Tango.Transport.TransportMessageBase" />
internal class TransportMessage<T> : TransportMessageBase
{
- private bool exceptionRaised;
-
private TaskCompletionSource<T> _completionSource;
- private bool taskCompleted;
public Subject<T> ContinuesResponseSubject { get; set; }
+ public bool AtLeastOneResponseReceived { get; set; }
+
public DateTime LastResponseTime { get; set; }
public bool Completed { get; set; }
@@ -53,16 +49,14 @@ namespace Tango.Transport
{
Completed = completed;
- Action setResultAction = () =>
+ Task.Factory.StartNew(() =>
{
try
{
if (!IsContinuous)
{
- if (!taskCompleted)
+ if (!_completionSource.Task.IsCompleted)
{
- taskCompleted = true;
-
if (_completionSource.GetType() == typeof(TaskCompletionSource<IMessage>))
{
_completionSource.SetResult((T)result.GetType().GetProperty("Message").GetValue(result));
@@ -113,22 +107,7 @@ namespace Tango.Transport
LogManager.Log(e, $"Error while settings exception for message.");
}
}
- };
-
- if (ThreadingMode == TransportThreadingMode.NewThread)
- {
- ThreadFactory.StartNew(() =>
- {
- setResultAction();
- });
- }
- else
- {
- Task.Factory.StartNew(() =>
- {
- setResultAction();
- });
- }
+ });
}
/// <summary>
@@ -137,81 +116,23 @@ namespace Tango.Transport
/// <param name="ex">The ex.</param>
public override void SetException(Exception ex)
{
- if (exceptionRaised || taskCompleted)
- {
- return;
- }
-
Completed = true;
- exceptionRaised = true;
- Action setExceptionAction = () =>
+ Task.Factory.StartNew(() =>
{
if (!IsContinuous)
{
- if (!taskCompleted)
+ if (!_completionSource.Task.IsCompleted)
{
- taskCompleted = true;
-
- if (!(ex is ContinuousResponseAbortedException) && !(ex is TransporterDisconnectedException))
- {
- LogManager.Log($"{TransportComponentName}: Request failed '{GetActualMessageTypeName()}'...\n{ex.FlattenException()}", LogCategory.Error);
- }
_completionSource.SetException(ex);
}
}
else
{
- if (!(ex is ContinuousResponseAbortedException) && !(ex is TransporterDisconnectedException))
- {
- LogManager.Log($"{TransportComponentName}: Request failed '{GetActualMessageTypeName()}'...\n{ex.FlattenException()}", LogCategory.Error);
- }
-
AtLeastOneResponseReceived = true;
ContinuesResponseSubject.OnError(ex);
}
- };
-
- if (ThreadingMode == TransportThreadingMode.NewThread)
- {
- ThreadFactory.StartNew(() =>
- {
- setExceptionAction();
- });
- }
- else
- {
- Task.Factory.StartNew(() =>
- {
- setExceptionAction();
- });
- }
- }
-
- public override string GetActualMessageTypeName()
- {
- return GetActualMessageTypeName(Message);
- }
-
- public override object GetActualMessage()
- {
- object obj = null;
-
- if (Message is ITangoMessage)
- {
- obj = Message.GetType().GetProperty("Message").GetValue(Message);
- }
- else if (Message is MessageContainer)
- {
- obj = Message;
- }
- else
- {
- obj = Message;
- }
-
- return obj;
+ });
}
-
}
}