Ejemplo n.º 1
0
        /// <summary>
        /// Track purchases to generate set-generation information.
        /// </summary>
        private void TrackPurchases(List <ItemPurchaseInformation> purchases)
        {
            purchases.ForEach(purchase =>
            {
                if (purchase.EventType != EventType.ItemPurchased)
                {
                    return;
                }

                // Update the tracker
                ItemPurchases.AddOrUpdate(purchase.ItemId,
                                          id =>
                {
                    var tracker = new ItemPurchaseTracker(id);
                    tracker.Increment(purchase);
                    return(tracker);
                },
                                          (id, tracker) =>
                {
                    tracker.Increment(purchase);
                    return(tracker);
                }
                                          );
            });
        }
Ejemplo n.º 2
0
        public ItemPurchaseTracker Clone()
        {
            ItemPurchaseTracker tracker = new ItemPurchaseTracker(ItemId);

            PerMatchCounts.AsParallel().ForAll(kvp => tracker.PerMatchCounts.TryAdd(kvp.Key, kvp.Value.Clone()));
            return(tracker);
        }
Ejemplo n.º 3
0
 public static ItemPurchaseTracker Combine(ItemPurchaseTracker a, ItemPurchaseTracker b)
 {
     ItemPurchaseTracker tracker = new ItemPurchaseTracker(a.ItemId);
     lock (a.PerMatchCounts)
     {
         lock (b.PerMatchCounts)
         {
             a.PerMatchCounts.AsParallel().ForAll(kvp => tracker.PerMatchCounts.TryAdd(kvp.Key, kvp.Value.Clone()));
             b.PerMatchCounts.AsParallel().ForAll(kvp =>
                 tracker.PerMatchCounts.AddOrUpdate(kvp.Key,
                     key => kvp.Value.Clone(),
                     (key, value) => { value.Combine(kvp.Value); return value; }
                 )
             );
         }
     }
     return tracker;
 }
Ejemplo n.º 4
0
        public static ItemPurchaseTracker Combine(ItemPurchaseTracker a, ItemPurchaseTracker b)
        {
            ItemPurchaseTracker tracker = new ItemPurchaseTracker(a.ItemId);

            lock (a.PerMatchCounts)
            {
                lock (b.PerMatchCounts)
                {
                    a.PerMatchCounts.AsParallel().ForAll(kvp => tracker.PerMatchCounts.TryAdd(kvp.Key, kvp.Value.Clone()));
                    b.PerMatchCounts.AsParallel().ForAll(kvp =>
                                                         tracker.PerMatchCounts.AddOrUpdate(kvp.Key,
                                                                                            key => kvp.Value.Clone(),
                                                                                            (key, value) => { value.Combine(kvp.Value); return(value); }
                                                                                            )
                                                         );
                }
            }
            return(tracker);
        }
Ejemplo n.º 5
0
 public ItemPurchaseTracker Combine(ItemPurchaseTracker other)
 {
     return ItemPurchaseTracker.Combine(this, other);
 }
Ejemplo n.º 6
0
 public ItemPurchaseTracker Clone()
 {
     ItemPurchaseTracker tracker = new ItemPurchaseTracker(ItemId);
     PerMatchCounts.AsParallel().ForAll(kvp => tracker.PerMatchCounts.TryAdd(kvp.Key, kvp.Value.Clone()));
     return tracker;
 }
Ejemplo n.º 7
0
 public ItemPurchaseTracker Combine(ItemPurchaseTracker other)
 {
     return(ItemPurchaseTracker.Combine(this, other));
 }