aboutsummaryrefslogtreecommitdiffstats
path: root/Software/Visual_Studio/Tango.Transport/Adapters
diff options
context:
space:
mode:
Diffstat (limited to 'Software/Visual_Studio/Tango.Transport/Adapters')
-rw-r--r--Software/Visual_Studio/Tango.Transport/Adapters/MemoryTransportAdapter.cs3
-rw-r--r--Software/Visual_Studio/Tango.Transport/Adapters/MultiTransportAdapter.cs124
-rw-r--r--Software/Visual_Studio/Tango.Transport/Adapters/SignalRTransportAdapter.cs380
-rw-r--r--Software/Visual_Studio/Tango.Transport/Adapters/SignalRTransportAdapterMode.cs23
-rw-r--r--Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs139
-rw-r--r--Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapterWriteMode.cs24
-rw-r--r--Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs53
7 files changed, 20 insertions, 726 deletions
diff --git a/Software/Visual_Studio/Tango.Transport/Adapters/MemoryTransportAdapter.cs b/Software/Visual_Studio/Tango.Transport/Adapters/MemoryTransportAdapter.cs
index fa365f805..09b98527a 100644
--- a/Software/Visual_Studio/Tango.Transport/Adapters/MemoryTransportAdapter.cs
+++ b/Software/Visual_Studio/Tango.Transport/Adapters/MemoryTransportAdapter.cs
@@ -81,7 +81,6 @@ namespace Tango.Transport.Adapters
/// <param name="address">The address.</param>
public MemoryTransportAdapter(String address)
{
- ComponentName = $"In-Memory Adapter {_component_counter++}";
Address = address;
}
@@ -98,7 +97,7 @@ namespace Tango.Transport.Adapters
/// Writes the specified data to the stream.
/// </summary>
/// <param name="data">The data.</param>
- public override void Write(byte[] data, bool immidiate = false)
+ public override void Write(byte[] data)
{
ThrowIfDisposed();
diff --git a/Software/Visual_Studio/Tango.Transport/Adapters/MultiTransportAdapter.cs b/Software/Visual_Studio/Tango.Transport/Adapters/MultiTransportAdapter.cs
deleted file mode 100644
index f4f7eb9cf..000000000
--- a/Software/Visual_Studio/Tango.Transport/Adapters/MultiTransportAdapter.cs
+++ /dev/null
@@ -1,124 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Collections.ObjectModel;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tango.Transport.Adapters
-{
- /// <summary>
- /// Experimental...
- /// </summary>
- /// <seealso cref="Tango.Transport.TransportAdapterBase" />
- public class MultiTransportAdapter : TransportAdapterBase
- {
- public class MultiTransportAdapterDataAvailableEventArgs : EventArgs
- {
- public ITransportAdapter Adapter { get; set; }
- public byte[] Data { get; set; }
- }
-
- public class MultiTransportAdapterStateChangedEventArgs : EventArgs
- {
- public ITransportAdapter Adapter { get; set; }
- public TransportComponentState State { get; set; }
- }
-
- public event EventHandler<MultiTransportAdapterDataAvailableEventArgs> AdapterDataAvailable;
- public event EventHandler<MultiTransportAdapterStateChangedEventArgs> AdapterStateChangedAvailable;
-
- public ReadOnlyCollection<ITransportAdapter> Adapters { get; private set; }
-
- public MultiTransportAdapter()
- {
- Adapters = new ReadOnlyCollection<ITransportAdapter>(new List<ITransportAdapter>());
- ComponentName = "Multi Transport Adapter";
- }
-
- public override void Write(byte[] data, bool immidiate = false)
- {
- Adapters.ToList().ForEach(x => x.Write(data));
- }
-
- public void Write(byte[] data, ITransportAdapter adapter)
- {
- adapter.Write(data);
- }
-
- public override async Task Connect()
- {
- foreach (var adapter in Adapters.ToList().Where(x => x.State != TransportComponentState.Connected))
- {
- await adapter.Connect();
- }
- }
-
- public override async Task Disconnect()
- {
- foreach (var adapter in Adapters.ToList())
- {
- await adapter.Disconnect();
- }
- }
-
- public override void Dispose()
- {
- foreach (var adapter in Adapters.ToList())
- {
- adapter.Dispose();
- }
- }
-
- public void AddAdapter(ITransportAdapter adapter)
- {
- List<ITransportAdapter> list = Adapters.ToList();
- list.Add(adapter);
- Adapters = new ReadOnlyCollection<ITransportAdapter>(list);
-
- adapter.DataAvailable += Adapter_DataAvailable;
- adapter.StateChanged += Adapter_StateChanged;
- }
-
- public void RemoveAdapter(ITransportAdapter adapter)
- {
- List<ITransportAdapter> list = Adapters.ToList();
- list.Remove(adapter);
- Adapters = new ReadOnlyCollection<ITransportAdapter>(list);
-
- adapter.DataAvailable -= Adapter_DataAvailable;
- adapter.StateChanged -= Adapter_StateChanged;
- }
-
- public void ClearAdapters()
- {
- foreach (var adapter in Adapters.ToList())
- {
- adapter.DataAvailable -= Adapter_DataAvailable;
- adapter.StateChanged -= Adapter_StateChanged;
- }
-
- Adapters = new ReadOnlyCollection<ITransportAdapter>(new List<ITransportAdapter>());
- }
-
- private void Adapter_StateChanged(object sender, TransportComponentState state)
- {
- AdapterStateChangedAvailable?.Invoke(this, new MultiTransportAdapterStateChangedEventArgs()
- {
- Adapter = sender as ITransportAdapter,
- State = state,
- });
- }
-
- private void Adapter_DataAvailable(object sender, byte[] data)
- {
- OnDataAvailable(data);
-
- AdapterDataAvailable?.Invoke(this, new MultiTransportAdapterDataAvailableEventArgs()
- {
- Adapter = sender as ITransportAdapter,
- Data = data,
- });
- }
- }
-}
diff --git a/Software/Visual_Studio/Tango.Transport/Adapters/SignalRTransportAdapter.cs b/Software/Visual_Studio/Tango.Transport/Adapters/SignalRTransportAdapter.cs
deleted file mode 100644
index c9a2453f0..000000000
--- a/Software/Visual_Studio/Tango.Transport/Adapters/SignalRTransportAdapter.cs
+++ /dev/null
@@ -1,380 +0,0 @@
-using Microsoft.AspNet.SignalR.Client;
-using System;
-using System.Collections.Generic;
-using System.Threading;
-using System.Threading.Tasks;
-using Tango.Core;
-
-namespace Tango.Transport.Adapters
-{
- /// <summary>
- /// Represents an adapter for communicating via SignalR protocol.
- /// </summary>
- /// <seealso cref="Tango.Transport.TransportAdapterBase" />
- public class SignalRTransportAdapter : TransportAdapterBase
- {
- private IHubProxy _proxy;
- private HubConnection _connection;
- private Thread _pushThread;
- private ProducerConsumerQueue<byte[]> _pushQueue;
- private object _writeSyncObject = new object();
-
- /// <summary>
- /// Gets or sets the URL of the SignalR service.
- /// </summary>
- public String Url { get; set; }
-
- /// <summary>
- /// Gets or sets the SignalR hub name.
- /// </summary>
- public String Hub { get; set; }
-
- /// <summary>
- /// Gets or sets the serial number of the remote machine (Use only for <see cref="SignalRTransportAdapterMode.CreateSession"/>) mode.
- /// </summary>
- public String SerialNumber { get; set; }
-
- /// <summary>
- /// Gets or sets the remote session identifier.
- /// </summary>
- public String SessionID { get; private set; }
-
- /// <summary>
- /// Gets or sets the interval of write operation.
- /// Unlike other adapters, the SignalR adapter accumulates multiple write operations into one chunk.
- /// </summary>
- public TimeSpan WriteInterval { get; set; }
-
- /// <summary>
- /// Gets or sets the adapter mode.
- /// </summary>
- public SignalRTransportAdapterMode Mode { get; set; }
-
- /// <summary>
- /// Gets or sets the adapter connection timeout.
- /// </summary>
- public TimeSpan ConnectionTimeout { get; set; }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="SignalRTransportAdapter"/> class.
- /// </summary>
- public SignalRTransportAdapter() : base()
- {
- ConnectionTimeout = TimeSpan.FromSeconds(30);
- WriteInterval = TimeSpan.FromMilliseconds(1);
- ComponentName = $"SignalR Adapter {_component_counter++}";
- }
-
- /// <summary>
- /// Initializes a new instance of the <see cref="SignalRTransportAdapter"/> class.
- /// </summary>
- /// <param name="url">The service address.</param>
- /// <param name="hub">The hub name.</param>
- /// <param name="mode">The adapter mode.</param>
- /// <param name="serialNumber">The machine serial number (when creating session).</param>
- /// <param name="sessionID">The session identifier (when joining session).</param>
- public SignalRTransportAdapter(String url, String hub, SignalRTransportAdapterMode mode, String serialNumber = null, String sessionID = null, String ipAddress = null) : this()
- {
- Url = url;
- Hub = hub;
- Mode = mode;
- SerialNumber = serialNumber;
- SessionID = sessionID;
- Address = sessionID;
-
- if (!String.IsNullOrWhiteSpace(ipAddress))
- {
- Address = ipAddress;
- }
- }
-
- /// <summary>
- /// Writes the specified data to the stream.
- /// </summary>
- /// <param name="data">The data.</param>
- /// <param name="immidiate">Writes the data as soon as possible while ignoring any message queuing and batching.</param>
- public override void Write(byte[] data, bool immidiate = false)
- {
- TotalBytesSent += data.Length;
- _totalBytes += data.Length;
-
- AppendTransferRateBytes(data.Length);
-
- if (!immidiate)
- {
- _pushQueue.BlockEnqueue(data);
- }
- else
- {
- try
- {
- lock (_writeSyncObject)
- {
- _proxy.Invoke("Write", new List<byte[]>() { data }).GetAwaiter().GetResult();
- }
- }
- catch (Exception ex)
- {
- OnFailed(LogManager.Log(ex, $"{ComponentName}: Error writing to SignalR adapter ({Address})."));
- return;
- }
- }
- }
-
- /// <summary>
- /// Connects the transport component.
- /// </summary>
- /// <returns></returns>
- public override Task Connect()
- {
- if (State != TransportComponentState.Connected)
- {
- LogManager.Log($"{ComponentName}: Connecting SignalR adapter...");
-
- bool completed = false;
-
- TaskCompletionSource<object> completionSource = new TaskCompletionSource<object>();
-
- _connection = new HubConnection(Url);
- _proxy = _connection.CreateHubProxy(Hub);
-
- Core.Threading.TimeoutTask.StartNew(() =>
- {
- if (!completed)
- {
- completed = true;
- completionSource.SetException(new TimeoutException("Could not reach the remote machine after the given timeout."));
- }
-
- }, ConnectionTimeout);
-
- if (Mode == SignalRTransportAdapterMode.CreateSession)
- {
- _proxy.On("SessionCreated", () =>
- {
- try
- {
- if (!completed)
- {
- completed = true;
-
- LogManager.Log($"{ComponentName}: SignalR adapter session created ({SessionID})...");
- LogManager.Log($"{ComponentName}: SingalR adapter connected.");
- State = TransportComponentState.Connected;
-
- StartPushThread();
-
- completionSource.SetResult(true);
- }
- }
- catch (Exception ex)
- {
- if (!completed)
- {
- LogManager.Log(ex, $"{ComponentName}: Error occurred after session created.");
- completed = true;
- completionSource.SetException(ex);
- }
- }
- });
- }
-
- _connection.StateChanged += async (x) =>
- {
- try
- {
- if (x.NewState == ConnectionState.Connected)
- {
- if (Mode == SignalRTransportAdapterMode.CreateSession)
- {
- LogManager.Log($"{ComponentName}: Creating SignalR adapter Session...");
- SessionID = await _proxy.Invoke<String>("CreateSession", SerialNumber);
- }
- else
- {
- LogManager.Log($"{ComponentName}: Joining SignalR adapter session ({SessionID})...");
- await _proxy.Invoke("JoinSession", SessionID);
- LogManager.Log($"{ComponentName}: SingalR adapter connected.");
- }
-
- if (Mode == SignalRTransportAdapterMode.JoinSession)
- {
- if (!completed)
- {
- completed = true;
- State = TransportComponentState.Connected;
- StartPushThread();
- completionSource.SetResult(true);
- }
- }
- }
- }
- catch (Exception ex)
- {
- if (!completed)
- {
- completed = true;
- LogManager.Log(ex, $"{ComponentName}: Error occurred on connection state changed event.");
- completionSource.SetException(ex);
- }
- }
- };
-
- _proxy.On<List<byte[]>>("DataAvailable", (dataCollection) => { OnDataAvailable(dataCollection); });
- _connection.Start();
-
- return completionSource.Task;
- }
-
- return Task.FromResult(true);
- }
-
- /// <summary>
- /// Disconnects the transport component.
- /// </summary>
- /// <returns></returns>
- public override Task Disconnect()
- {
- return Task.Factory.StartNew(() =>
- {
- if (State == TransportComponentState.Connected)
- {
- LogManager.Log($"{ComponentName}: Disconnecting SignalR adapter...");
- Core.Threading.TimeoutTask.StartNew(() =>
- {
- try
- {
- _connection.Stop();
- _connection.Dispose();
-
- try
- {
- if (_pushThread != null)
- {
- _pushThread.Abort();
- }
- }
- catch { }
- }
- catch (Exception ex)
- {
- LogManager.Log(ex, $"{ComponentName}: Error disposing SignalR adapter connection.");
- }
- }, TimeSpan.FromSeconds(5));
-
- LogManager.Log($"{ComponentName}: SignalR adapter disconnected.");
- State = TransportComponentState.Disconnected;
- }
- });
- }
-
- /// <summary>
- /// Handles the write operation.
- /// </summary>
- private void PushThreadMethod()
- {
- try
- {
- while (State == TransportComponentState.Connected)
- {
- List<byte[]> dataCollection = new List<byte[]>();
-
- var data = _pushQueue.BlockDequeue();
- var first = true;
-
- while (_pushQueue.Count > 0 || first)
- {
- if (!first)
- {
- data = _pushQueue.BlockDequeue();
- }
- else
- {
- first = false;
- }
-
- if (EnableCompression)
- {
- var compressed = Compression.GZipHelper.Compress(data);
- dataCollection.Add(compressed);
- }
- else
- {
- dataCollection.Add(data);
- }
- }
-
- if (dataCollection.Count > 0)
- {
- try
- {
- lock (_writeSyncObject)
- {
- _proxy.Invoke("Write", dataCollection).GetAwaiter().GetResult();
- }
- }
- catch (Exception ex)
- {
- OnFailed(LogManager.Log(ex, $"{ComponentName}: Error writing to SignalR adapter ({Address})."));
- return;
- }
- }
-
- Thread.Sleep(WriteInterval);
- }
- }
- catch (ThreadAbortException) { }
- }
-
- /// <summary>
- /// Called when new data is available.
- /// </summary>
- /// <param name="dataCollection">The data collection.</param>
- private void OnDataAvailable(List<byte[]> dataCollection)
- {
- try
- {
- foreach (var data in dataCollection)
- {
- if (EnableCompression)
- {
- try
- {
- var decompressed = Compression.GZipHelper.Decompress(data);
- OnDataAvailable(decompressed);
- }
- catch (Exception ex)
- {
- if (ex.Message.Contains("GZip"))
- {
- //Temporarily ignore, probably switching protocol definitions...
- OnDataAvailable(data);
- }
- else
- {
- throw ex;
- }
- }
- }
- else
- {
- OnDataAvailable(data);
- }
- }
- }
- catch (Exception ex)
- {
- OnFailed(ex);
- }
- }
-
- private void StartPushThread()
- {
- _pushQueue = new ProducerConsumerQueue<byte[]>();
- _pushThread = new Thread(PushThreadMethod);
- _pushThread.IsBackground = true;
- _pushThread.Name = $"{ComponentName} Push Thread";
- _pushThread.Start();
- }
- }
-}
diff --git a/Software/Visual_Studio/Tango.Transport/Adapters/SignalRTransportAdapterMode.cs b/Software/Visual_Studio/Tango.Transport/Adapters/SignalRTransportAdapterMode.cs
deleted file mode 100644
index d2335b60b..000000000
--- a/Software/Visual_Studio/Tango.Transport/Adapters/SignalRTransportAdapterMode.cs
+++ /dev/null
@@ -1,23 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tango.Transport.Adapters
-{
- /// <summary>
- /// Represents a <see cref="SignalRTransportAdapter"/> mode.
- /// </summary>
- public enum SignalRTransportAdapterMode
- {
- /// <summary>
- /// The adapter should initiate a session with a remote adapter.
- /// </summary>
- CreateSession,
- /// <summary>
- /// The adapter should join an existing session.
- /// </summary>
- JoinSession
- }
-}
diff --git a/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs b/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs
index 427c335ff..af2a5201b 100644
--- a/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs
+++ b/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapter.cs
@@ -10,9 +10,7 @@ using System.Reactive.Subjects;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
-using Tango.Core;
using Tango.Logging;
-using Tango.Transport.Compression;
namespace Tango.Transport.Adapters
{
@@ -25,10 +23,7 @@ namespace Tango.Transport.Adapters
private TcpClient _socket;
private Thread _pullThread;
private bool _initializedFromConstructor;
- private Thread _pushThread;
- private ProducerConsumerQueue<byte[]> _pushQueue;
private byte[] _size_buffer;
- private object _writeSyncObject = new object();
#region Properties
@@ -37,16 +32,6 @@ namespace Tango.Transport.Adapters
/// </summary>
public int Port { get; set; }
- /// <summary>
- /// Gets or sets the adapter write mode.
- /// </summary>
- public TcpTransportAdapterWriteMode WriteMode { get; set; }
-
- /// <summary>
- /// Gets or sets the write interval when using <see cref="TcpTransportAdapterWriteMode.Interval"/> mode.
- /// </summary>
- public TimeSpan WriteInterval { get; set; }
-
#endregion
#region Constructors
@@ -56,11 +41,8 @@ namespace Tango.Transport.Adapters
/// </summary>
public TcpTransportAdapter()
{
- ComponentName = $"TCP Adapter {_component_counter++}";
Address = "127.0.0.1";
Port = 9999;
- WriteMode = TcpTransportAdapterWriteMode.Interval;
- WriteInterval = TimeSpan.FromMilliseconds(10);
}
/// <summary>
@@ -110,27 +92,16 @@ namespace Tango.Transport.Adapters
SetSocketProperties();
}
- LogManager.Log($"TCP adapter ({Address}) Connected...");
-
State = TransportComponentState.Connected;
_pullThread = new Thread(PullThreadMethod);
- _pullThread.Name = $"{ComponentName} Pull Thread";
_pullThread.IsBackground = true;
_pullThread.Start();
-
- if (WriteMode == TcpTransportAdapterWriteMode.Interval)
- {
- _pushThread = new Thread(PushThreadMethod);
- _pushThread.IsBackground = true;
- _pushThread.Name = $"{ComponentName} Push Thread";
- _pushQueue = new ProducerConsumerQueue<byte[]>();
- _pushThread.Start();
- }
+ LogManager.Log("TCP adapter Connected...");
}
}
catch (Exception ex)
{
- throw LogManager.Log(ex, $"Could not connect the TCP adapter ({Address}).");
+ throw LogManager.Log(ex, "Could not connect the TCP adapter.");
}
});
}
@@ -149,19 +120,12 @@ namespace Tango.Transport.Adapters
{
State = TransportComponentState.Disconnected;
_socket.Close();
-
- try
- {
- _pushThread.Abort();
- }
- catch { }
-
- LogManager.Log($"TCP adapter ({Address}) disconnected.");
+ LogManager.Log("TCP adapter disconnected.");
}
}
catch (Exception ex)
{
- LogManager.Log(ex, $"Could not disconnect the TCP adapter ({Address}).");
+ LogManager.Log(ex, "Could not disconnect the TCP adapter.");
}
}));
}
@@ -170,35 +134,18 @@ namespace Tango.Transport.Adapters
/// Writes the specified data to the stream.
/// </summary>
/// <param name="data">The data.</param>
- /// <param name="immidiate">Writes the data as soon as possible while ignoring any message queuing and batching.</param>
- public override void Write(byte[] data, bool immidiate = false)
+ public override void Write(byte[] data)
{
ThrowIfDisposed();
try
{
- if (EnableCompression)
- {
- data = GZipHelper.Compress(data);
- }
-
data = PostProcessBuffer(data);
-
- if (WriteMode == TcpTransportAdapterWriteMode.Direct || immidiate)
- {
- lock (_writeSyncObject)
- {
- _socket.GetStream().Write(data, 0, data.Length);
- }
- }
- else
- {
- _pushQueue.BlockEnqueue(data);
- }
+ _socket.GetStream().Write(data, 0, data.Length);
}
catch (Exception ex)
{
- OnFailed(LogManager.Log(ex, $"Error writing to TCP adapter ({Address})."));
+ OnFailed(LogManager.Log(ex));
}
}
@@ -247,25 +194,6 @@ namespace Tango.Transport.Adapters
}
}
- if (EnableCompression)
- {
- try
- {
- data = GZipHelper.Decompress(data);
- }
- catch (Exception ex)
- {
- if (ex.Message.Contains("GZip"))
- {
- //Temporarily ignore, probably switching protocol definitions...
- }
- else
- {
- throw ex;
- }
- }
- }
-
OnDataAvailable(data);
}
else
@@ -284,59 +212,6 @@ namespace Tango.Transport.Adapters
#endregion
- #region Push Thread
-
- private void PushThreadMethod()
- {
- try
- {
- while (State == TransportComponentState.Connected)
- {
- List<byte[]> dataCollection = new List<byte[]>();
-
- var data = _pushQueue.BlockDequeue();
- var first = true;
-
- while (_pushQueue.Count > 0 || first)
- {
- if (!first)
- {
- data = _pushQueue.BlockDequeue();
- }
- else
- {
- first = false;
- }
-
- dataCollection.Add(data);
- }
-
- if (dataCollection.Count > 0)
- {
- try
- {
- byte[] allData = dataCollection.SelectMany(a => a).ToArray();
-
- lock (_writeSyncObject)
- {
- _socket.GetStream().Write(allData, 0, allData.Length);
- }
- }
- catch (Exception ex)
- {
- OnFailed(LogManager.Log(ex, $"Error writing to TCP adapter ({Address})."));
- return;
- }
- }
-
- Thread.Sleep(WriteInterval);
- }
- }
- catch (ThreadAbortException) { }
- }
-
- #endregion
-
#region Private Methods
private void SetSocketProperties()
diff --git a/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapterWriteMode.cs b/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapterWriteMode.cs
deleted file mode 100644
index 89665e2d2..000000000
--- a/Software/Visual_Studio/Tango.Transport/Adapters/TcpTransportAdapterWriteMode.cs
+++ /dev/null
@@ -1,24 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-namespace Tango.Transport.Adapters
-{
- /// <summary>
- /// Represents a <see cref="TcpTransportAdapter"/> write mode.
- /// </summary>
- public enum TcpTransportAdapterWriteMode
- {
- /// <summary>
- /// Writes the data directly from the Write(); method (default).
- /// </summary>
- Direct,
-
- /// <summary>
- /// Accumulates the data being written from the Write(); method and writes a block of messages on intervals.
- /// </summary>
- Interval
- }
-}
diff --git a/Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs b/Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs
index 4785e11c8..3b9ca7b55 100644
--- a/Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs
+++ b/Software/Visual_Studio/Tango.Transport/Adapters/UsbTransportAdapter.cs
@@ -19,7 +19,6 @@ namespace Tango.Transport.Adapters
public class UsbTransportAdapter : TransportAdapterBase
{
private SerialPort _serialPort; //Serial port instance used to communicate over the serial port.
- private const int MAX_EXPECTED_SIZE = 50000;
/// <summary>
/// Gets or sets the baud rate.
@@ -33,7 +32,6 @@ namespace Tango.Transport.Adapters
{
BaudRate = UsbSerialBaudRates.BR_9600;
Address = "COM1";
- ComponentName = $"USB Adapter {_component_counter++}";
}
/// <summary>
@@ -67,7 +65,7 @@ namespace Tango.Transport.Adapters
if (State != TransportComponentState.Connected)
{
- ThreadFactory.StartNew(() =>
+ Task.Factory.StartNew(() =>
{
try
{
@@ -80,6 +78,7 @@ namespace Tango.Transport.Adapters
_serialPort = new SerialPort();
_serialPort.BaudRate = BaudRate.ToInt32();
+ _serialPort.DataReceived += OnSerialPortDataReceived;
_serialPort.PortName = Address;
_serialPort.ReadBufferSize = MAX_BUFFER_SIZE;
_serialPort.WriteBufferSize = MAX_BUFFER_SIZE;
@@ -87,11 +86,6 @@ namespace Tango.Transport.Adapters
_serialPort.DiscardInBuffer();
_serialPort.DiscardOutBuffer();
-
- _serialPort.DataReceived += OnSerialPortDataReceived;
-
- LogManager.Log($"USB adapter ({Address}) Connected...");
-
State = TransportComponentState.Connected;
if (!source.Task.IsCompleted)
@@ -138,7 +132,7 @@ namespace Tango.Transport.Adapters
if (State == TransportComponentState.Connected)
{
- ThreadFactory.StartNew(() =>
+ Task.Factory.StartNew(() =>
{
try
{
@@ -155,11 +149,9 @@ namespace Tango.Transport.Adapters
//_serialPort.DiscardInBuffer();
_serialPort.Close();
_serialPort.Dispose();
- _serialPort.DataReceived -= OnSerialPortDataReceived;
-
- LogManager.Log("USB adapter disconnected.");
State = TransportComponentState.Disconnected;
+ LogManager.Log("USB adapter disconnected.");
}
catch (Exception ex)
{
@@ -202,8 +194,7 @@ namespace Tango.Transport.Adapters
/// Writes the specified data to the stream.
/// </summary>
/// <param name="data">The data.</param>
- /// <param name="immidiate">Writes the data as soon as possible while ignoring any message queuing and batching.</param>
- public override void Write(byte[] data, bool immidiate = false)
+ public override void Write(byte[] data)
{
ThrowIfDisposed();
@@ -214,7 +205,7 @@ namespace Tango.Transport.Adapters
}
catch (Exception ex)
{
- OnFailed(LogManager.Log(ex, $"Error writing to USB adapter ({Address})."));
+ OnFailed(LogManager.Log(ex, "Error writing to the serial port."));
}
}
@@ -227,10 +218,7 @@ namespace Tango.Transport.Adapters
{
try
{
- if (e.EventType == SerialData.Eof)
- {
- return;
- }
+ if (e.EventType == SerialData.Eof) return;
if (_serialPort.BytesToRead > 4)
{
@@ -238,22 +226,6 @@ namespace Tango.Transport.Adapters
_serialPort.Read(size, 0, size.Length);
int expectedSize = BitConverter.ToInt32(size, 0);
- if (expectedSize > MAX_EXPECTED_SIZE || expectedSize < 1)
- {
- LogManager.Log($"Invalid expected size received on USB adapter ({expectedSize} bytes). Discarding buffers...", LogCategory.Warning);
-
- byte[] falseData = new byte[_serialPort.BytesToRead];
- _serialPort.Read(falseData, 0, falseData.Length);
-
- try
- {
- _serialPort.DiscardInBuffer();
- _serialPort.DiscardOutBuffer();
- }
- catch { }
- return;
- }
-
byte[] data = new byte[expectedSize];
int read = 0;
@@ -261,13 +233,11 @@ namespace Tango.Transport.Adapters
{
read += _serialPort.Read(data, read, Math.Min(_serialPort.BytesToRead, expectedSize - read));
+ //Thread.Sleep(2);
+
if (State != TransportComponentState.Connected)
{
- if (_serialPort != null)
- {
- _serialPort.DataReceived -= OnSerialPortDataReceived;
- }
- return;
+ break;
}
}
@@ -277,7 +247,7 @@ namespace Tango.Transport.Adapters
}
catch (Exception ex)
{
- LogManager.Log(ex, $"Error occurred while trying to read from the serial port ({Address}).");
+ LogManager.Log(ex, "Error occurred while trying to read from the serial port.");
}
}
@@ -290,6 +260,7 @@ namespace Tango.Transport.Adapters
{
try
{
+ LogManager.Log("Finalizing USB transport adapter.");
_serialPort.Close();
_serialPort.Dispose();
}