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); } }
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))); } }
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); } }
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))); } }
//====================================================================== // 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); } }