コード例 #1
0
        //private void ProcessNewItem(List<CacheChangeData> updates, ICoreItem newItem)
        //{
        //    // additions, updates and deletions
        //    _CacheState.Locked((state) =>
        //    {
        //        string key = newItem.Name.ToLower();
        //        ICoreItem oldItem = null;
        //        if (state.ItemDict.TryGetValue(key, out oldItem))
        //        {
        //            // already exists in set
        //            if (newItem.IsCurrent())
        //            {
        //                // update
        //                state.ItemDict[key] = newItem;
        //                // check if really updated
        //                if (newItem.Id != oldItem.Id)
        //                {
        //                    // item updated
        //                    state.UpdateCount++;
        //                    updates.Add(new CacheChangeData(_CacheId, CacheChange.ItemUpdated, oldItem, newItem));
        //                }
        //            }
        //            else
        //            {
        //                // delete
        //                state.ItemDict.Remove(key);
        //                state.DeleteCount++;
        //                updates.Add(new CacheChangeData(_CacheId, CacheChange.ItemDeleted, oldItem, null));
        //            }
        //        }
        //        else
        //        {
        //            // not found in set
        //            if (newItem.IsCurrent())
        //            {
        //                state.CreateCount++;
        //                state.ItemDict[key] = newItem;
        //                updates.Add(new CacheChangeData(_CacheId, CacheChange.ItemCreated, null, newItem));
        //            }
        //            else
        //            {
        //                // ignore - deletion
        //            }
        //        }
        //    });
        //}

        private void SubscriptionCallback(ISubscription subscription, ICoreItem newItem)
        {
            CacheSubscription subs = _Subscriptions.Get(subscription.Id);

            if (subs != null)
            {
                Cache.Put(newItem.Name, newItem, LoadSaveType.Avoid, subs.CacheParams, TimeSpan.MaxValue);
                NotifyUserDataChange(Cache.GetUpdates());

                // call user's subscription callback if provided
                if (subs.UserCallback != null)
                {
                    try
                    {
                        subs.UserCallback(subscription, newItem);
                    }
                    catch (Exception e)
                    {
                        _Logger.LogError("Subscription '{0}' UserCallback() failed: {1}", subscription.Id, e);
                    }
                }
            }
        }