예제 #1
0
        internal StreamSubscriptionHandle <T> AddObserver <T>(StreamImpl <T> stream, IAsyncObserver <T> observer, IStreamFilterPredicateWrapper filter)
        {
            if (null == stream)
            {
                throw new ArgumentNullException("stream");
            }
            if (null == observer)
            {
                throw new ArgumentNullException("observer");
            }

            try
            {
                if (logger.IsVerbose)
                {
                    logger.Verbose("{0} AddObserver for stream {1}", providerRuntime.ExecutingEntityIdentity(), stream);
                }

                // Note: The caller [StreamConsumer] already handles locking for Add/Remove operations, so we don't need to repeat here.
                IStreamObservers obs = allStreamObservers.GetOrAdd(stream.StreamId, new ObserversCollection <T>());
                var wrapper          = new ObserverWrapper <T>(observer, stream, filter);
                ((ObserversCollection <T>)obs).AddObserver(wrapper);
                return(wrapper);
            }
            catch (Exception exc)
            {
                logger.Error((int)ErrorCode.StreamProvider_AddObserverException, String.Format("{0} StreamConsumerExtension.AddObserver({1}) caugth exception.",
                                                                                               providerRuntime.ExecutingEntityIdentity(), stream), exc);
                throw;
            }
        }
            public ImageReference(string uri, RefCountImageCache parent)
            {
                Uri              = uri;
                _parent          = parent;
                _subject         = new ReplaySubject <Unit>(1);
                _observerWrapper = new ObserverWrapper(_subject);
                _subscription    = new SingleAssignmentDisposable();

                InitializeImage();
            }
예제 #3
0
        public NSObject AddObserver(NSString key, Action <ObserverActionArgs> action, NSObject control = null)
        {
            if (notifications == null)
            {
                notifications = new List <NSObject> ();
            }
            if (control == null)
            {
                control = Control;
            }
            var wrap = new ObserverWrapper {
                Action = new WeakReference(action), Widget = new WeakReference(this.Widget)
            };
            var observer = NSNotificationCenter.DefaultCenter.AddObserver(key, wrap.Run, control);

            notifications.Add(observer);
            return(observer);
        }
예제 #4
0
        public IDisposable Subscribe(IObserver <TSource> observer)
        {
            ObserverWrapper wrapper = new ObserverWrapper(observer);

            return(source.LinkTo(wrapper));
        }
예제 #5
0
            internal void RemoveObserver(ObserverWrapper <T> observer)
            {
                ObserverWrapper <T> ignore;

                localObservers.TryRemove(observer.ObserverGuid, out ignore);
            }
예제 #6
0
 internal void AddObserver(ObserverWrapper <T> observer)
 {
     localObservers.TryAdd(observer.ObserverGuid, observer);
 }