diff options
| author | Mirta <mirta@twine-s.com> | 2020-12-30 16:39:52 +0200 |
|---|---|---|
| committer | Mirta <mirta@twine-s.com> | 2020-12-30 16:39:52 +0200 |
| commit | 00a491d93733d4625ad329b2ba8237f445364b3f (patch) | |
| tree | 4b24c6fa78d7648f4bb7cefafa464bb0b063fec4 /Software/Visual_Studio/Tango.Transport/TransportMessage.cs | |
| parent | 124ad4150f80c6846fdee41dbbda9848c105f6e5 (diff) | |
| download | Tango-00a491d9.tar.gz Tango-00a491d9.zip | |
merge
Diffstat (limited to 'Software/Visual_Studio/Tango.Transport/TransportMessage.cs')
| -rw-r--r-- | Software/Visual_Studio/Tango.Transport/TransportMessage.cs | 95 |
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; + }); } - } } |
