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); }
// 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); } } } }
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); }
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); }
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; }
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); }
protected abstract IAsyncResult OnBeginFind (FindRequestContext findRequestContext, AsyncCallback callback, Object state);
protected override IAsyncResult OnBeginFind(FindRequestContext findRequestContext, AsyncCallback callback, object state) { implementation.FindEndpoints(findRequestContext); return new SynchronousResult(callback, state); }
void Find (FindRequestContext context) { throw new NotImplementedException (); }
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); }
// 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); }
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 }; }
/// <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."); } }