예제 #1
0
        /// <summary>
        /// Subscribes to the network database
        /// </summary>
        /// <param name="observer">The obsever to subscribe</param>
        /// <returns>The disposable subscription instance</returns>
        public IDisposable Subscribe(DescriptorQuery query, IDescriptorObserver <ObjectInfo, GlobalObjectId> observer)
        {
            DescriptorSubscription ret = null;

            lock (_lock)
            {
                this._observers.Add(new DescriptorObserver(query, observer));
                ret = new DescriptorSubscription(this, observer);
            }

            Task.Factory.StartNew(() =>
            {
                lock (_lock)
                {
                    var descriptors = _db.QueryObjects(query);
                    observer.Add(descriptors);
                }
            });

            return(ret);
        }
예제 #2
0
        /// <summary>
        /// Disposes of a descriptor subscription, unsubscribing the observer
        /// </summary>
        /// <param name="observer">The observer to unsubscribe</param>
        private void _disposeDescriptorSubscription(IDescriptorObserver <ObjectInfo, GlobalObjectId> observer)
        {
            lock (_lock)
            {
                bool removed = false;

                for (int i = 0; i < _observers.Count; i++)
                {
                    if (_observers[i].Observer == observer)
                    {
                        _observers.RemoveAt(i);
                        removed = true;
                        break;
                    }
                }

                if (removed)
                {
                    observer.Close();
                }
            }
        }
예제 #3
0
 /// <summary>
 /// Constructs a new descriptor subscription instance
 /// </summary>
 /// <param name="database">The network database</param>
 /// <param name="observer">The observer</param>
 public DescriptorSubscription(NetworkDatabase database, IDescriptorObserver <ObjectInfo, GlobalObjectId> observer)
 {
     this._database = database;
     this._observer = observer;
 }
예제 #4
0
 public DescriptorObserver(DescriptorQuery query, IDescriptorObserver <ObjectInfo, GlobalObjectId> observer)
     : this()
 {
     this.Query    = query;
     this.Observer = observer;
 }