コード例 #1
0
 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);
     }
 }
コード例 #2
0
        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);
                }
            }
        }
コード例 #3
0
 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));
 }