Opc.Ua.Com.Client.ComHdaBrowserClient.Next C# (CSharp) Method

Next() public method

Returns the next AE area or source.
public Next ( ISystemContext context, ushort namespaceIndex ) : BaseInstanceState
context ISystemContext
namespaceIndex ushort
return Opc.Ua.BaseInstanceState
        public BaseInstanceState Next(ISystemContext context, ushort namespaceIndex)
        {
            // check if already completed.
            if (m_completed)
            {
                return null;
            }

            // create the browser.
            if (base.Unknown == null)
            {
                base.Unknown = m_client.CreateBrowser();

                if (base.Unknown == null)
                {
                    return null;
                }

                if (!String.IsNullOrEmpty(m_itemId))
                {
                    if (!ChangeBrowsePosition(OPCHDA_BROWSEDIRECTION.OPCHDA_BROWSE_DIRECT, m_itemId))
                    {
                        return null;
                    }
                }
            }

            // create the enumerator if not already created.
            if (m_enumerator == null)
            {
                m_enumerator = CreateEnumerator(true);
                m_branches = true;

                // a null indicates an error.
                if (m_enumerator == null)
                {
                    m_completed = true;
                    return null;
                }
            }

            // need a loop in case errors occur fetching element metadata.
            BaseInstanceState node = null;

            do
            {
                // fetch the next name.
                string name = m_enumerator.Next();

                // a null indicates the end of list.
                if (name == null)
                {
                    if (m_branches)
                    {
                        m_enumerator.Dispose();
                        m_enumerator = CreateEnumerator(false);
                        m_branches = false;

                        // a null indicates an error.
                        if (m_enumerator != null)
                        {
                            continue;
                        }
                    }

                    m_completed = true;
                    return null;
                }

                // create the node.
                if (m_branches)
                {
                    string itemId = GetBranchPosition(m_itemId, name);
                    node = new HdaBranchState(itemId, name, namespaceIndex);

                }
                else
                {
                    string itemId = GetItemId(name);
                    node = new HdaItemState(itemId, name, namespaceIndex);
                }

                break;
            }
            while (node == null);

            // return node.
            return node;
        }