Beispiel #1
0
        protected override NodeMatchResult HandleRemoteNode <T>(MatchNodeArg <T> args)
        {
            // prepare pattern for remote partial search
            Pattern pattern = this.pattern.Copy();

            pattern.CurrentNode            = args.NodeToMatch.Id;
            pattern.CurrentPatternNodeName = args.PatternNode.Name;
            this.State = PartialMatchState.Pending;

            IPartialMatchResult result = null;

            using (MatcherMetric.RegisterWaitTime("partial remote match"))
            {
                result = Framework.BeginFindPartialMatch(args.RemotePartitionId, pattern);
                result.Wait();
            }

            bool matched = result.MatchedPattern.GetMatchedNodes().Count() > pattern.GetMatchedNodes().Count;

            Pattern remotePattern = (Pattern)result.MatchedPattern;

            this.pattern.Merge(remotePattern);

            this.State = PartialMatchState.Running;
            return(new NodeMatchResult(matched, remotePattern.MatchedFullSubpattern));
        }