public ConcurrentIOData GetInstance(string filename, TransactionRoot transRoot, long size = 0) { lock (this) { ConcurrentIOData r = null; ManualResetEvent[] readers = GetEvents(filename); if (_pool.Count == 0 || readers.Length == 0) { r = new ConcurrentIOData { Filename = filename, Buffer = new byte[size], PoolManager = this }; if (transRoot != null) { transRoot.RegisterOpenFile(filename); } r.FileStream = File.File.UnbufferedOpen(filename); _pool.Add(r); } else { if (_pool.Count < MaxConcurrentIO || readers.Length < 4) { int index = WaitHandle.WaitAny(ToWaitHandles(readers), 30, false); if (index == WaitHandle.WaitTimeout) { r = new ConcurrentIOData { Filename = filename, Buffer = new byte[size], PoolManager = this }; if (transRoot != null) { transRoot.RegisterOpenFile(filename); } r.FileStream = File.File.UnbufferedOpen(filename); _pool.Add(r); } else { r = GetItem(readers[index]); } } else { int index = WaitHandle.WaitAny(ToWaitHandles(readers)); r = GetItem(readers[index]); } } if (r.Buffer == null || r.Buffer.Length != size) { r.Buffer = new byte[size]; } return(r); } }
private void history(CommandStack stack, bool export) { int n = 1; int pages = 1; bool fetchAll = true; List <Transaction> all = new List <Transaction>(); TransactionRoot res = null; if (stack.Any()) { if (int.TryParse(stack.Pop(), out n) && !stack.Any()) { fetchAll = false; } else { txtOut.WriteLine("Parser error"); return; } } txtOut.WriteLine(""); do { txtOut.Write("\rFetching page " + n + (pages > 1 ? " of " + pages.ToString() : "")); try { res = client.History(n); } catch (Exception ex) { txtOut.WriteLine("Error getting page " + n); txtOut.WriteLine(ex.Message); } if (res.errors != null) { txtOut.WriteLine("Error getting page " + n + " " + res.errors.First().errorMessage); } n++; if (fetchAll) { pages = res.eurobonus.transactionHistory.totalNumberOfPages; } if (res.errors == null && res.eurobonus != null && res.eurobonus.transactionHistory.transaction != null) { all.AddRange(res.eurobonus.transactionHistory.transaction); } } while (n <= pages); txtOut.Write("\r"); if (export) { var exporter = new FlightExporter(); var list = exporter.Convert(all); txtOut.WriteLine("Found " + list.Count + " flight"); if (list.Any()) { try { exporter.SaveCSV(list); txtOut.WriteLine("Files saved"); } catch (Exception ex) { } } } else { Table t = new Table(); foreach (var r in all) { var values = new List <string>(); values.Add(r.datePerformed.ToString("yyyy-MM-dd")); values.Add(r.typeOfTransaction); values.Add(r.basicPointsAfterTransaction); values.Add(r.availablePointsAfterTransaction.ToString()); values.Add(r.description1 + " " + r.description2); t.Rows.Add(values); } t.Alignment[3] = TextAlignment.Right; t.Print(txtOut); if (fetchAll) { txtOut.WriteLine("Summary"); t = new Table(); foreach (var g in all.GroupBy(trans => trans.typeOfTransaction)) { t.Rows.Add(new List <string>(new[] { g.Key, g.Sum(trans => trans.availablePointsAfterTransaction).ToString() })); } t.Alignment[1] = TextAlignment.Right; t.Print(txtOut); } } }
public static TransactionRoot <TInput, TOutput, TErrorInfo> First <TInput, TOutput, TErrorInfo>( Operation <TInput, TOutput, TErrorInfo> operation) where TErrorInfo : ErrorInfo, new() { return(TransactionRoot <TInput, TOutput, TErrorInfo> .ForOperation(operation)); }