Пример #1
0
        public virtual BrowseElement[] BrowseNext(ref Opc.Da.BrowsePosition position)
        {
            lock (this)
            {
                if (m_server == null)
                {
                    throw new NotConnectedException();
                }

                if (position == null || (object)position.GetType() != typeof(BrowsePosition))
                {
                    throw new BrowseCannotContinueException();
                }

                BrowsePosition browsePosition = (BrowsePosition)position;
                if (browsePosition == null || browsePosition.ContinuationPoint == null || browsePosition.ContinuationPoint == "")
                {
                    throw new BrowseCannotContinueException();
                }

                int            pdwCount             = 0;
                int            pbMoreElements       = 0;
                ItemIdentifier itemID               = ((BrowsePosition)position).ItemID;
                BrowseFilters  filters              = ((BrowsePosition)position).Filters;
                IntPtr         pszContinuationPoint = Marshal.StringToCoTaskMemUni(browsePosition.ContinuationPoint);
                IntPtr         ppBrowseElements     = IntPtr.Zero;
                try
                {
                    ((IOPCBrowse)m_server).Browse((itemID != null && itemID.ItemName != null) ? itemID.ItemName : "", ref pszContinuationPoint, filters.MaxElementsReturned, Interop.GetBrowseFilter(filters.BrowseFilter), (filters.ElementNameFilter != null) ? filters.ElementNameFilter : "", (filters.VendorFilter != null) ? filters.VendorFilter : "", filters.ReturnAllProperties ? 1 : 0, filters.ReturnPropertyValues ? 1 : 0, (filters.PropertyIDs != null) ? filters.PropertyIDs.Length : 0, Interop.GetPropertyIDs(filters.PropertyIDs), out pbMoreElements, out pdwCount, out ppBrowseElements);
                }
                catch (Exception e)
                {
                    throw OpcCom.Interop.CreateException("IOPCBrowse.BrowseNext", e);
                }

                BrowseElement[] browseElements = Interop.GetBrowseElements(ref ppBrowseElements, pdwCount, deallocate: true);
                browsePosition.ContinuationPoint = Marshal.PtrToStringUni(pszContinuationPoint);
                Marshal.FreeCoTaskMem(pszContinuationPoint);
                if (pbMoreElements == 0 && (browsePosition.ContinuationPoint == null || browsePosition.ContinuationPoint == ""))
                {
                    position = null;
                }

                ProcessResults(browseElements, filters.PropertyIDs);
                return(browseElements);
            }
        }
Пример #2
0
        public override BrowseElement[] BrowseNext(ref Opc.Da.BrowsePosition position)
        {
            lock (this)
            {
                if (m_server == null)
                {
                    throw new NotConnectedException();
                }

                if (position == null && (object)position.GetType() != typeof(BrowsePosition))
                {
                    throw new BrowseCannotContinueException();
                }

                BrowsePosition position2 = (BrowsePosition)position;
                ItemIdentifier itemID    = position2.ItemID;
                BrowseFilters  filters   = position2.Filters;
                ArrayList      arrayList = new ArrayList();
                if (position2.IsBranch)
                {
                    BrowseElement[] elements = GetElements(arrayList.Count, itemID, filters, branches: true, ref position2);
                    if (elements != null)
                    {
                        arrayList.AddRange(elements);
                    }

                    position = position2;
                    if (position != null)
                    {
                        return((BrowseElement[])arrayList.ToArray(typeof(BrowseElement)));
                    }
                }

                if (filters.BrowseFilter != browseFilter.branch)
                {
                    BrowseElement[] elements2 = GetElements(arrayList.Count, itemID, filters, branches: false, ref position2);
                    if (elements2 != null)
                    {
                        arrayList.AddRange(elements2);
                    }

                    position = position2;
                }

                return((BrowseElement[])arrayList.ToArray(typeof(BrowseElement)));
            }
        }
Пример #3
0
 public virtual BrowseElement[] BrowseNext(ref Opc.Da.BrowsePosition position)
 {
     lock (this)
     {
         if (base.m_server == null)
         {
             throw new NotConnectedException();
         }
         if ((position == null) || (position.GetType() != typeof(OpcCom.Da.BrowsePosition)))
         {
             throw new BrowseCannotContinueException();
         }
         OpcCom.Da.BrowsePosition position2 = (OpcCom.Da.BrowsePosition)position;
         if (((position2 == null) || (position2.ContinuationPoint == null)) || (position2.ContinuationPoint == ""))
         {
             throw new BrowseCannotContinueException();
         }
         int            pdwCount             = 0;
         int            pbMoreElements       = 0;
         ItemIdentifier itemID               = ((OpcCom.Da.BrowsePosition)position).ItemID;
         BrowseFilters  filters              = ((OpcCom.Da.BrowsePosition)position).Filters;
         IntPtr         pszContinuationPoint = Marshal.StringToCoTaskMemUni(position2.ContinuationPoint);
         IntPtr         zero = IntPtr.Zero;
         try
         {
             ((IOPCBrowse)base.m_server).Browse(((itemID != null) && (itemID.ItemName != null)) ? itemID.ItemName : "", ref pszContinuationPoint, filters.MaxElementsReturned, OpcCom.Da.Interop.GetBrowseFilter(filters.BrowseFilter), (filters.ElementNameFilter != null) ? filters.ElementNameFilter : "", (filters.VendorFilter != null) ? filters.VendorFilter : "", filters.ReturnAllProperties ? 1 : 0, filters.ReturnPropertyValues ? 1 : 0, (filters.PropertyIDs != null) ? filters.PropertyIDs.Length : 0, OpcCom.Da.Interop.GetPropertyIDs(filters.PropertyIDs), out pbMoreElements, out pdwCount, out zero);
         }
         catch (Exception exception)
         {
             throw OpcCom.Interop.CreateException("IOPCBrowse.BrowseNext", exception);
         }
         BrowseElement[] elements = OpcCom.Da.Interop.GetBrowseElements(ref zero, pdwCount, true);
         position2.ContinuationPoint = Marshal.PtrToStringUni(pszContinuationPoint);
         Marshal.FreeCoTaskMem(pszContinuationPoint);
         if ((pbMoreElements == 0) && ((position2.ContinuationPoint == null) || (position2.ContinuationPoint == "")))
         {
             position = null;
         }
         this.ProcessResults(elements, filters.PropertyIDs);
         return(elements);
     }
 }
Пример #4
0
 public override BrowseElement[] BrowseNext(ref Opc.Da.BrowsePosition position)
 {
     lock (this)
     {
         if (base.m_server == null)
         {
             throw new NotConnectedException();
         }
         if ((position == null) && (position.GetType() != typeof(OpcCom.Da20.BrowsePosition)))
         {
             throw new BrowseCannotContinueException();
         }
         OpcCom.Da20.BrowsePosition position2 = (OpcCom.Da20.BrowsePosition)position;
         ItemIdentifier             itemID    = position2.ItemID;
         BrowseFilters filters = position2.Filters;
         ArrayList     list    = new ArrayList();
         if (position2.IsBranch)
         {
             BrowseElement[] c = this.GetElements(list.Count, itemID, filters, true, ref position2);
             if (c != null)
             {
                 list.AddRange(c);
             }
             position = position2;
             if (position != null)
             {
                 return((BrowseElement[])list.ToArray(typeof(BrowseElement)));
             }
         }
         if (filters.BrowseFilter != browseFilter.branch)
         {
             BrowseElement[] elementArray2 = this.GetElements(list.Count, itemID, filters, false, ref position2);
             if (elementArray2 != null)
             {
                 list.AddRange(elementArray2);
             }
             position = position2;
         }
         return((BrowseElement[])list.ToArray(typeof(BrowseElement)));
     }
 }
Пример #5
0
        //======================================================================
        // BrowseNext

        /// <summary>
        /// Continues a browse operation with previously specified search criteria.
        /// </summary>
        /// <param name="position">An object containing the browse operation state information.</param>
        /// <returns>The set of elements found.</returns>
        public virtual BrowseElement[] BrowseNext(ref Opc.Da.BrowsePosition position)
        {
            lock (this)
            {
                if (m_server == null)
                {
                    throw new NotConnectedException();
                }

                // check for valid position object.
                if (position == null || position.GetType() != typeof(OpcCom.Da.BrowsePosition))
                {
                    throw new BrowseCannotContinueException();
                }

                OpcCom.Da.BrowsePosition pos = (OpcCom.Da.BrowsePosition)position;

                // check for valid continuation point.
                if (pos == null || pos.ContinuationPoint == null || pos.ContinuationPoint == "")
                {
                    throw new BrowseCannotContinueException();
                }

                // initialize arguments.
                int count        = 0;
                int moreElements = 0;

                ItemIdentifier itemID  = ((BrowsePosition)position).ItemID;
                BrowseFilters  filters = ((BrowsePosition)position).Filters;

                IntPtr pContinuationPoint = Marshal.StringToCoTaskMemUni(pos.ContinuationPoint);
                IntPtr pElements          = IntPtr.Zero;

                // invoke COM method.
                try
                {
                    ((IOPCBrowse)m_server).Browse(
                        (itemID != null && itemID.ItemName != null)?itemID.ItemName:"",
                        ref pContinuationPoint,
                        filters.MaxElementsReturned,
                        OpcCom.Da.Interop.GetBrowseFilter(filters.BrowseFilter),
                        (filters.ElementNameFilter != null)?filters.ElementNameFilter:"",
                        (filters.VendorFilter != null)?filters.VendorFilter:"",
                        (filters.ReturnAllProperties)?1:0,
                        (filters.ReturnPropertyValues)?1:0,
                        (filters.PropertyIDs != null)?filters.PropertyIDs.Length:0,
                        OpcCom.Da.Interop.GetPropertyIDs(filters.PropertyIDs),
                        out moreElements,
                        out count,
                        out pElements);
                }
                catch (Exception e)
                {
                    throw OpcCom.Interop.CreateException("IOPCBrowse.BrowseNext", e);
                }

                // unmarshal results.
                BrowseElement[] elements = OpcCom.Da.Interop.GetBrowseElements(ref pElements, count, true);

                pos.ContinuationPoint = Marshal.PtrToStringUni(pContinuationPoint);
                Marshal.FreeCoTaskMem(pContinuationPoint);

                // check if more no results exist.
                if (moreElements == 0 && (pos.ContinuationPoint == null || pos.ContinuationPoint == ""))
                {
                    position = null;
                }

                // process results.
                ProcessResults(elements, filters.PropertyIDs);

                return(elements);
            }
        }