Opc.Ua.ServerTest.TestBase.Browse C# (CSharp) Method

Browse() private method

Browses the node and verifies the results.
private Browse ( Node node, double start, double range ) : bool
node Node
start double
range double
return bool
        private bool Browse(Node node, double start, double range)
        {
            // watch for circular references.
            if (m_availableNodes.ContainsKey(node.NodeId))
            {
                return true;
            }

            // get the master list of references.
            BrowseDescription nodeToBrowse = new BrowseDescription();
            
            nodeToBrowse.NodeId = node.NodeId;
            nodeToBrowse.BrowseDirection = BrowseDirection.Both;
            nodeToBrowse.IncludeSubtypes = true;
            nodeToBrowse.NodeClassMask = 0;
            nodeToBrowse.ReferenceTypeId = ReferenceTypeIds.References;
            nodeToBrowse.ResultMask = (uint)BrowseResultMask.All;
            
            ReferenceDescriptionCollection references = new ReferenceDescriptionCollection();
            
            if (!Browse(node, nodeToBrowse, references))
            {
                return false;
            }

            // save references.
            node.Handle = references;
            
            // add to dictionary.
            m_availableNodes.Add(node.NodeId, node);

            // build list of hierachial targets.
            List<Node> targets = new List<Node>();

            for (int ii = 0; ii < references.Count; ii++)
            {
                ReferenceDescription reference = references[ii];

                if (!reference.IsForward)
                {
                    continue;
                }

                if (!Session.TypeTree.IsTypeOf(reference.ReferenceTypeId, ReferenceTypeIds.HierarchicalReferences))
                {
                    continue;
                }

                Node target = Node.Copy(new Node(reference));
                targets.Add(target);
            }
                        
            // recursively follow sub-tree.
            if (targets.Count > 0)
            {
                double increment = range/targets.Count;
                double position  = start;

                for (int ii = 0; ii < targets.Count; ii++)
                {
                    if (range == MaxProgress)
                    {
                        Log("Browsing children of '{0}'. NodeId = {1}", targets[ii], targets[ii].NodeId);
                    }

                    Browse(targets[ii], position, increment);

                    position += increment;
                    ReportProgress(position);
                }
            }

            return true;
        }
                

Same methods

TestBase::Browse ( Node node, BrowseDescription nodeToBrowse, ReferenceDescriptionCollection references ) : bool