예제 #1
0
 /// <summary>
 /// Unregister key based notification in bulk
 /// </summary>
 /// <param name="keys"></param>
 /// <param name="eventListener"></param>
 public void UnRegisterBulkSyncKeyNotifications(string[] keys, ISyncCacheEventsListener eventListener)
 {
     if (!_synEventListeners.Contains(eventListener))
     {
         _synEventListeners.Remove(eventListener);
     }
 }
예제 #2
0
        public void RemoveDependency(object key, CacheSyncDependency dependency)
        {
            if (_context.IsDbSyncCoordinator)
            {
                if (dependency == null)
                {
                    return;
                }
                try
                {
                    SyncItem item = new SyncItem(key, dependency.Key, dependency.CacheId);

                    lock (_dependenciesStatus.SyncRoot)
                    {
                        if (_dependenciesKeyMap.Contains(item))
                        {
                            ClusteredArrayList dependentKeys = _dependenciesKeyMap[item] as ClusteredArrayList;
                            if (dependentKeys != null)
                            {
                                dependentKeys.Remove(key);
                                if (dependentKeys.Count > 0)
                                {
                                    return;
                                }
                            }
                            _dependenciesKeyMap.Remove(item);
                        }

                        if (_dependenciesStatus.Contains(item))
                        {
                            _dependenciesStatus.Remove(item);
                        }
                        else
                        {
                            return;
                        }
                    }
                    ISyncCache syncCache = _synCaches[item.CacheId] as ISyncCache;
                    ISyncCacheEventsListener listener = _listeners[item.CacheId] as ISyncCacheEventsListener;
                    if (syncCache != null && listener != null)
                    {
                        syncCache.UnRegisterSyncKeyNotifications((string)item.Key, listener);
                    }
                }
                catch (Exception e)
                {
                    NCacheLog.Error("CacheSyncManager:", e.ToString());
                }
            }
            else
            {
                lock (_inactiveDependencies.SyncRoot)
                {
                    _inactiveDependencies.Remove(key);
                }
            }
        }
예제 #3
0
 public void RegisterBulkSyncKeyNotifications(string[] keys, ISyncCacheEventsListener eventListener,
                                              CallbackType callbackType)
 {
     if (!_synEventListeners.Contains(eventListener))
     {
         _synEventListeners.Add(eventListener);
     }
     if (_syncCache != null && callbackType == CallbackType.PushBasedNotification)
     {
         _syncCache.RegisterCacheDataNotificationCallback(keys, _updateCallback,
                                                          EventType.ItemUpdated | EventType.ItemRemoved, EventDataFilter.None, true);
     }
 }
예제 #4
0
 /// <summary>
 /// Remove a dependencia.
 /// </summary>
 /// <param name="key">Chave.</param>
 /// <param name="dependency">Instancia da dependencia.</param>
 public void RemoveDependency(object key, CacheSyncDependency dependency)
 {
     if (_context.IsDbSyncCoordinator)
     {
         if (dependency != null)
         {
             try
             {
                 SyncItem item = new SyncItem(key, dependency.Key, dependency.CacheId);
                 lock (_dependenciesStatus.SyncRoot)
                 {
                     if (_dependenciesKeyMap.Contains(item))
                     {
                         ArrayList list = _dependenciesKeyMap[item] as ArrayList;
                         if (list != null)
                         {
                             list.Remove(key);
                             if (list.Count > 0)
                             {
                                 return;
                             }
                         }
                         _dependenciesKeyMap.Remove(item);
                     }
                     if (_dependenciesStatus.Contains(item))
                     {
                         _dependenciesStatus.Remove(item);
                     }
                     else
                     {
                         return;
                     }
                 }
                 ISyncCache cache = _synCaches[item.CacheId] as ISyncCache;
                 ISyncCacheEventsListener eventListener = _listeners[item.CacheId] as ISyncCacheEventsListener;
                 if ((cache != null) && (eventListener != null))
                 {
                     cache.UnRegisterSyncKeyNotifications((string)item.Key, eventListener);
                 }
             }
             catch (Exception exception)
             {
                 this.Logger.Error(("CacheSyncManager:" + exception.ToString()).GetFormatter());
             }
         }
     }
     else
     {
         _inactiveDependencies.Remove(key);
     }
 }
예제 #5
0
        private void RemoveSyncItem(SyncItem item, bool unregisterCallbacks)
        {
            if (_cache != null)
            {
                try
                {
                    ClusteredArrayList dependentKeys = null;
                    lock (_dependenciesStatus.SyncRoot)
                    {
                        _dependenciesStatus.Remove(item);
                        if (_dependenciesKeyMap.Contains(item))
                        {
                            dependentKeys = _dependenciesKeyMap[item] as ClusteredArrayList;
                        }
                        _dependenciesKeyMap.Remove(item);
                    }
                    ISyncCache syncCache = _synCaches[item.CacheId] as ISyncCache;
                    ISyncCacheEventsListener listener = _listeners[item.CacheId] as ISyncCacheEventsListener;
                    if (syncCache != null && listener != null && unregisterCallbacks)
                    {
                        syncCache.UnRegisterSyncKeyNotifications((string)item.Key, listener);
                    }
                    if (dependentKeys != null)
                    {
                        foreach (object key in dependentKeys)
                        {
                            OperationContext context = new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation);


                            _cache.Remove(key, context);
                        }
                    }
                }
                catch (Exception e)
                {
                    NCacheLog.Error("CacheSyncManager:", e.ToString());
                }
            }
        }
예제 #6
0
 /// <summary>
 /// Remove um item de sincronização.
 /// </summary>
 /// <param name="item">Instancia do item.</param>
 /// <param name="unregisterCallbacks">True para remover o registro dos callbacks.</param>
 private void RemoveSyncItem(SyncItem item, bool unregisterCallbacks)
 {
     if (_cache != null)
     {
         try
         {
             ArrayList list = null;
             lock (_dependenciesStatus.SyncRoot)
             {
                 _dependenciesStatus.Remove(item);
                 if (_dependenciesKeyMap.Contains(item))
                 {
                     list = _dependenciesKeyMap[item] as ArrayList;
                 }
                 _dependenciesKeyMap.Remove(item);
             }
             ISyncCache cache = _synCaches[item.CacheId] as ISyncCache;
             ISyncCacheEventsListener eventListener = _listeners[item.CacheId] as ISyncCacheEventsListener;
             if (((cache != null) && (eventListener != null)) && unregisterCallbacks)
             {
                 cache.UnRegisterSyncKeyNotifications((string)item.Key, eventListener);
             }
             if (list != null)
             {
                 foreach (object obj2 in list)
                 {
                     _cache.Remove(obj2, new OperationContext(OperationContextFieldName.OperationType, OperationContextOperationType.CacheOperation));
                 }
             }
         }
         catch (Exception exception)
         {
             this.Logger.Error(("CacheSyncManager:" + exception.ToString()).GetFormatter());
         }
     }
 }