public MatchResult Identify(MatchRequest request) { if (request.LocaleId <= 0 && LocaleId > 0) { request.LocaleId = LocaleId; } if (EnableLocaleCache) { var result = MatchManager.Identify(request); if (result.Found) { return(result); } } switch (ClientMode) { case ClientModes.Asmx: return(IdentifyAsmx(request)); case ClientModes.Wcf: return(IdentifyWcf(request)); } return(null); }
private MatchResult IdentifyAsmx(MatchRequest request) { var svcRequest = ToAsmxRequest(request); var client = new BioMatcherAsmxReference.BioMatcherServiceSoapClient(); var svcResult = client.Identify(svcRequest); return(FromAsmxResult(svcResult)); }
private MatchResult IdentifyWcf(MatchRequest request) { var svcRequest = ToWcfRequest(request); var client = new BioMatcherWcfReference.BioMatcherWcfServiceClient(); var svcResult = client.Identify(svcRequest); client.Close(); return(FromWcfResult(svcResult)); }
private BioMatcherWcfReference.MatchRequest ToWcfRequest(MatchRequest request) { var svcRequest = new BioMatcherWcfReference.MatchRequest(); svcRequest.Fingerprint = request.Fingerprint; svcRequest.LocaleId = request.LocaleId; svcRequest.SkipLocale = request.SkipLocale; svcRequest.RequestDate = request.RequestDate; svcRequest.ExtraRefCode = request.ExtraRefCode; return(svcRequest); }
public void IdentifyAsync(MatchRequest item) { if (item.LocaleId <= 0 && LocaleId > 0) { item.LocaleId = LocaleId; } MatchResult result = null; if (EnableLocaleCache) { result = MatchManager.Identify(item); if (result.Found) { var handler = OnMatchComplete; if (handler != null) { handler(this, result); } return; } } switch (ClientMode) { case ClientModes.SignalR: HubProxy.Invoke("Identify", item); break; case ClientModes.Asmx: result = IdentifyAsmx(item); var handler = OnMatchComplete; if (handler != null) { handler(this, result); } break; case ClientModes.Wcf: result = IdentifyWcf(item); handler = OnMatchComplete; if (handler != null) { handler(this, result); } break; } }
public static MatchResult Identify(MatchRequest request) { found = false; //var subset = Cache.Fingerprints[0].Count; var sw = new Stopwatch(); sw.Start(); var compareTasks = new Task <CompareResult> [ThreadDistribution.Count]; for (int i = 0; i < ThreadDistribution.Count; i++) { if (!found) { var scanSet = ThreadDistribution[i]; compareTasks[i] = Task <CompareResult> .Factory.StartNew(() => StartMatcherAsync(request, scanSet)); } } Task.WaitAll(compareTasks); sw.Stop(); var status = new StringBuilder(); if (BenchmarkMode) { status.Append(ProcessorCores + " Tasks"); } int totalScanned = 0; var totalElapsed = new TimeSpan(); var identifyResult = new MatchResult(); identifyResult.RequestDate = request.RequestDate; identifyResult.ExtraRefCode = request.ExtraRefCode; foreach (var task in compareTasks) { if (task == null || task.Result == null) { continue; } var result = task.Result; if (BenchmarkMode) { status.Append(string.Format("\r\nFingerPrints: {0}, Duration: {1}", result.Scanned, result.Elapsed)); } totalElapsed += result.Elapsed; totalScanned += result.Scanned; if (result.Result.Found) { identifyResult.Found = true; identifyResult.Score = result.Result.Score; identifyResult.MemberId = result.Result.MemberId; //identifyResult.ExtraRefCode = result.Result.ExtraRefCode; } } if (BenchmarkMode) { status.Append("\r\n= " + Convert.ToInt32(totalScanned / (totalElapsed.TotalSeconds / ProcessorCores)) + "/sec, Run time: " + sw.Elapsed + ", found: " + found); } identifyResult.Extra = status.ToString(); return(identifyResult); }
private static CompareResult StartMatcherAsync(MatchRequest toMatch, List <int> chaptersToScan) { if (BreakOnMatch && found) { return new CompareResult { Elapsed = new TimeSpan(), Scanned = 0 } } ; var matcher = CreateMatcher <IFingerprintSdk>(); matcher.Initialize(); var sw = new Stopwatch(); int scanned = 0; int contextId = 0; var compareResult = new CompareResult(); sw.Start(); matcher.PreMatch(out contextId); matcher.IdentifyPrepare(toMatch.Fingerprint, contextId); foreach (var chapter in chaptersToScan) { var chapterFp = Cache.Fingerprints[chapter]; foreach (var fp in chapterFp) { if (BreakOnMatch && found) { break; } MatchResult result = null; try { result = matcher.Identify(fp.Fingerprint, contextId); } catch (Exception ex) { throw ex; } scanned++; if (result.Found) { found = true; result.MemberId = fp.MemberId; compareResult.Result = result; if (BreakOnMatch) { break; } } } } matcher.PostMatch(contextId); sw.Stop(); compareResult.Elapsed = sw.Elapsed; compareResult.Scanned = scanned; return(compareResult); }