diff options
Diffstat (limited to 'Software/Visual_Studio/Tango.Transport/Adapters')
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(); } |
