private void processNextTransfer() { LTTransfer nextItem = null; lock (_transferLock) { if (_transfers.Count() > 0) { nextItem = _transfers[0]; _transfers.RemoveAt(0); } } if (nextItem != null) { // Trigger execution of transfers Task.Run(() => { try { Logger.Info("Transfer to FIS:\n{0}", nextItem.Message); if (_tcpClient != null) { var stream = _tcpClient.GetStream(); byte[] utf8Message = System.Text.Encoding.UTF8.GetBytes(nextItem.Message); stream.Write(utf8Message, 0, utf8Message.Length); } else { throw new Exception("Transfer to FIS failed: connection not existing"); } } catch (Exception e) { Logger.Error(e); Disconnect(); } }).ContinueWith(delegate { processNextTransfer(); }); } else { _transferInProgress = false; } }
private void scheduleTransfer(LTTransfer transfer) { Logger.Debug("Schedule transfer to FIS:\n{0}", transfer.Message); if (transfer.IsEmpty()) { return; } lock (_transferLock) { // Remove all outdated transfers _transfers.RemoveAll(x => x.IsEqual(transfer)); _transfers.Add(transfer); } if (!_transferInProgress) { _transferInProgress = true; processNextTransfer(); } }
public bool IsEqual(LTTransfer other) { return(string.Equals(_actualXML, other._actualXML)); }