Пример #1
0
		IAsyncResult IDiscoveryProxyContract11.BeginFind (MessageContracts11.FindRequest message, AsyncCallback callback, object state)
		{
			if (find_context != null)
				throw new InvalidOperationException ("Another async Find operation is ongoing");
			find_context = new DefaultFindRequestContext (message.Body.ToFindCriteria ());
			return OnBeginFind (find_context, callback, state);
		}
        void Match(FindRequestContext findRequestContext)
        {
            FindCriteria criteria = findRequestContext.Criteria;

            if (!ScopeCompiler.IsSupportedMatchingRule(criteria.ScopeMatchBy))
            {
                return;
            }

            CompiledScopeCriteria[] compiledScopeCriterias = ScopeCompiler.CompileMatchCriteria(
                criteria.InternalScopes, 
                criteria.ScopeMatchBy);

            int matchingEndpointCount = 0;
            for (int i = 0; i < this.publishedEndpoints.Count; i++)
            {
                if (criteria.IsMatch(this.publishedEndpoints[i], compiledScopeCriterias))
                {
                    findRequestContext.AddMatchingEndpoint(this.publishedEndpoints[i]);
                    matchingEndpointCount++;

                    if (matchingEndpointCount == criteria.MaxResults)
                    {
                        break;
                    }
                }
            }
        }
 protected override IAsyncResult OnBeginFind(FindRequestContext findRequestContext, AsyncCallback callback, object state)
 {
     Console.WriteLine("Received a Probe request message. Forwarding the Probe message.");
     
     // FindAsyncResult will forward the Probe request
     return new FindAsyncResult(findRequestContext, this.forwardingDiscoveryEndpoint, callback, state);
 }
Пример #4
0
 // OnBeginFind method is called when a Probe request message is received by the Proxy
 protected override IAsyncResult OnBeginFind(FindRequestContext findRequestContext, AsyncCallback callback,
     object state)
 {
     _logger.Log("OnBeginFind()", LogLevel.Debug);
     _provider.Match(findRequestContext);
     return new OnFindAsyncResult(callback, state);
 }
 protected override IAsyncResult OnBeginFind(
     FindRequestContext findRequestContext, 
     AsyncCallback callback, 
     object state)
 {
     this.Match(findRequestContext);
     return new CompletedAsyncResult(callback, state);
 }
 public virtual void FindService(FindRequestContext findRequestContext)
 {
     foreach (var metadata in services.Values)
     {
         if (findRequestContext.Criteria.IsMatch(metadata))
         {
             findRequestContext.AddMatchingEndpoint(metadata);
         }
     }
 }
        public virtual void FindEndpoints(FindRequestContext findRequestContext)
        {
			using (@lock.ForReading())
			{
				foreach (var endpoint in MatchTargets(findRequestContext.Criteria))
				{
					findRequestContext.AddMatchingEndpoint(endpoint);
				}
			}
        }
        public void Match(FindRequestContext findRequestContext)
        {
            _logger.Log("Matching " + findRequestContext.Criteria, LogLevel.Debug);

            foreach (var endpointDiscoveryMetadata in _onlineServices.Values.Where(x => findRequestContext.Criteria.IsMatch(x.Metadata)))
            {
                _logger.Log("...found " + endpointDiscoveryMetadata, LogLevel.Debug);
                findRequestContext.AddMatchingEndpoint(endpointDiscoveryMetadata.Metadata);
            }
        }
 //Find(Probe)
 protected override IAsyncResult OnBeginFind(FindRequestContext findRequestContext, AsyncCallback callback, object state)
 {
     var endpoints = from item in this.Endpoints
                     where findRequestContext.Criteria.IsMatch(item.Value)
                     select item.Value;
     foreach (var endppint in endpoints)
     {
         findRequestContext.AddMatchingEndpoint(endppint);
     }
     return new DiscoveryAsyncResult(callback, state);
 }
 public void MatchFromOnlineService(FindRequestContext findRequestContext)
 {
     lock (_onlineServices)
     {
         foreach (var endpointDiscoveryMetadata in _onlineServices.Values)
         {
             if (findRequestContext.Criteria.IsMatch(endpointDiscoveryMetadata))
             {
                 findRequestContext.AddMatchingEndpoint(endpointDiscoveryMetadata);
             }
         }
     }
 }
Пример #11
0
        public FindAsyncResult(FindRequestContext findRequestContext, DiscoveryEndpoint forwardingDiscoveryEndpoint, AsyncCallback callback, object state)
            : base(callback, state)
        {
            // Store the context. Responses will be added to this context
            this.findRequestContext = findRequestContext;

            // Attach delegates which will handle the find responses
            this.discoveryClient = new DiscoveryClient(forwardingDiscoveryEndpoint);
            this.discoveryClient.FindProgressChanged += new EventHandler<FindProgressChangedEventArgs>(FindProgressChanged);
            this.discoveryClient.FindCompleted += new EventHandler<FindCompletedEventArgs>(FindCompleted);

            // Forward the Probe request message
            this.discoveryClient.FindAsync(findRequestContext.Criteria);
        }        
Пример #12
0
        protected override IAsyncResult OnBeginFind(FindRequestContext findRequestContext, AsyncCallback callback, object state)
        {
            var context = _plugins.Invoke(() => new FindPluginContext(findRequestContext.Criteria, null), (plugin, e) => plugin.BeforeBeginFind(e), true);
            if (!context.Cancel)
            {
                context.CandidateEndpoint = _metadataProvider.MatchEndpoint(findRequestContext.Criteria);
            }

            _plugins.Invoke(() => new FindPluginContext(context), (plugin, e) => plugin.AfterBeginFind(e), true);
            if (!context.Cancel && context.CandidateEndpoint != null)
            {
                findRequestContext.AddMatchingEndpoint(context.CandidateEndpoint);
            }

            return new OnFindAsyncResult(callback, state);
        }
		protected override IAsyncResult OnBeginFind (FindRequestContext findRequestContext, AsyncCallback callback, object state)
		{
			// FIXME: this is a workaround for (similar to) bug #633945.
			switch (Environment.OSVersion.Platform) {
			case PlatformID.Unix:
			case PlatformID.MacOSX:
				if (find_delegate == null)
					find_delegate = new Action<FindRequestContext> (Find);
				return find_delegate.BeginInvoke (findRequestContext, callback, state);
			default:
				Find (findRequestContext);
				var result = new TempAsyncResult (null, state);
				if (callback != null)
					callback (result);
				return result;
			}
		}
        protected override IAsyncResult OnBeginFind(FindRequestContext findRequestContext, AsyncCallback callback, object state)
        {
            // Implements an OR matching that adds an endpoint if any of its scopes match any of the scopes in FindCriteria
            if (findRequestContext.Criteria.ScopeMatchBy.Equals(customScopeMatchBy))
            {
                foreach (EndpointDiscoveryMetadata endpointDiscoveryMetadata in this.publishedEndpoints)
                {
                    bool endpointAdded = false;
                    
                    foreach (Uri findCriteriaScope in findRequestContext.Criteria.Scopes)
                    {
                        if (endpointAdded)
                        {
                            break;
                        }

                        foreach (Uri serviceEndpointScope in endpointDiscoveryMetadata.Scopes)
                        {                            
                            if (serviceEndpointScope.Equals(findCriteriaScope))
                            {
                                findRequestContext.AddMatchingEndpoint(endpointDiscoveryMetadata);
                                endpointAdded = true;
                                break;
                            }
                        }
                    }
                }
            }
            else
            {
                foreach (EndpointDiscoveryMetadata endpointDiscoveryMetadata in this.publishedEndpoints)
                {
                    if (findRequestContext.Criteria.IsMatch(endpointDiscoveryMetadata))
                    {
                        findRequestContext.AddMatchingEndpoint(endpointDiscoveryMetadata);
                    }
                }
            }

            return new FindAsyncResult(callback, state);
        }
Пример #15
0
		protected override IAsyncResult OnBeginFind (FindRequestContext findRequestContext, AsyncCallback callback, Object state)
		{
			Console.Error.WriteLine ("OnBeginFind");
			throw new Exception ("1");
		}
 protected override IAsyncResult OnBeginFind(FindRequestContext findRequestContext, AsyncCallback callback, object state)
 {
     return response;
 }
Пример #17
0
        protected override IAsyncResult OnBeginFind(FindRequestContext findRequestContext, AsyncCallback callback, object state)
        {
            if (findRequestContext == null)
            {
                throw new ArgumentNullException("findRequestContext");
            }

            Console.WriteLine(
                "Find request for contract {0}",
                findRequestContext.Criteria.ContractTypeNames.FirstOrDefault());

            // Query to find the matching endpoints
            var query = from service in Cache
                        where findRequestContext.Criteria.IsMatch(service)
                        select service;

            // Collection to contain the results of the query
            var matchingEndpoints = new Collection<EndpointDiscoveryMetadata>();

            // Execute the query and add the matching endpoints
            foreach (EndpointDiscoveryMetadata metadata in query)
            {
                metadata.WriteLine("\tFound");
                matchingEndpoints.Add(metadata);
                findRequestContext.AddMatchingEndpoint(metadata);
            }

            return new FindAsyncResult(matchingEndpoints, callback, state);
        }
Пример #18
0
		protected abstract IAsyncResult OnBeginFind (FindRequestContext findRequestContext, AsyncCallback callback, Object state);
Пример #19
0
		protected override IAsyncResult OnBeginFind(FindRequestContext findRequestContext, AsyncCallback callback, object state)
		{
			implementation.FindEndpoints(findRequestContext);
			return new SynchronousResult(callback, state);
		}
Пример #20
0
		void Find (FindRequestContext context)
		{
			throw new NotImplementedException ();
		}
Пример #21
0
		protected override IAsyncResult OnBeginFind (FindRequestContext findRequestContext, AsyncCallback callback, Object state)
		{
			if (find_delegate == null)
				find_delegate = new Action<FindRequestContext> (Find);
			return find_delegate.BeginInvoke (findRequestContext, callback, state);
		}
 IAsyncResult IDiscoveryServiceImplementation.BeginFind(FindRequestContext findRequestContext, AsyncCallback callback, object state)
 {
     return this.OnBeginFind(findRequestContext, callback, state);
 }
Пример #23
0
		// IDiscoveryTargetContractCD1
		IAsyncResult IDiscoveryTargetContractCD1.BeginFind (MessageContractsCD1.FindRequest message, AsyncCallback callback, object state)
		{
			find_context = new DefaultFindRequestContext (message.Body.ToFindCriteria ());
			return OnBeginFind (new DefaultFindRequestContext (message.Body.ToFindCriteria ()), callback, state);
		}
Пример #24
0
		MessageContracts11.FindResponse CreateFindResponse11 ()
		{
			var l = new MessageContracts11.FindResponse11 ();
			foreach (var edm in find_context.Endpoints)
				l.Add (new EndpointDiscoveryMetadata11 (edm));
			find_context = null;
			return new MessageContracts11.FindResponse () { Body = l };
		}
Пример #25
0
        /// <summary>
        /// Returns a list of discovered endpoints in random order (for load balancing)
        /// </summary>
        /// <param name="findRequestContext"></param>
        void MatchFromOnlineService(FindRequestContext findRequestContext)
        {
            lock (this.onlineServices)
            {
                var randomList = new SortedDictionary<Guid, EndpointDiscoveryMetadata>();
                foreach (EndpointDiscoveryMetadata endpointDiscoveryMetadata in this.onlineServices.Values)
                {
                    if (findRequestContext.Criteria.IsMatch(endpointDiscoveryMetadata))
                    {
                        randomList.Add(Guid.NewGuid(), endpointDiscoveryMetadata);
                    }
                }

                foreach (var item in randomList.Values)
                {
                    findRequestContext.AddMatchingEndpoint(item);
                }
            }
        }
 // OnBeginFind method is called when a Probe request message is received by the Proxy
 protected override IAsyncResult OnBeginFind(FindRequestContext findRequestContext, AsyncCallback callback, object state)
 {
     this.MatchFromOnlineService(findRequestContext);
     return new OnFindAsyncResult(callback, state);
 }
		void Find (FindRequestContext context)
		{
/*
var oc = OperationContext.Current;
var ch = oc.GetCallbackChannel<IClientChannel> ();
Console.Error.WriteLine ("!!! {0} {1} {2} {3}", ch.Extensions.Count, ch.InputSession, ch.RemoteAddress, ch.GetType ());
*/
			Console.Error.WriteLine ("Find operation: " + context);
			foreach (var edm in endpoints) {
				if (context.Criteria.IsMatch (edm)) {
					Console.Error.WriteLine ("Match: " + edm);
					context.AddMatchingEndpoint (edm);
				}
				else
					Console.Error.WriteLine ("Mismatch.");
			}
		}