示例#1
0
        /// <summary>
        /// Creates an enumerator for the current browse position.
        /// </summary>
        /// <param name="branches">if set to <c>true</c> then branches are enumerated.</param>
        /// <returns>The wrapped enumerator.</returns>
        private EnumString CreateEnumerator(bool branches)
        {
            IEnumString unknown = null;

            string methodName = "IOPCBrowseServerAddressSpace.BrowseOPCItemIDs";

            try
            {
                IOPCBrowseServerAddressSpace server = BeginComCall <IOPCBrowseServerAddressSpace>(methodName, true);

                OPCBROWSETYPE browseType = OPCBROWSETYPE.OPC_BRANCH;

                if (!branches)
                {
                    browseType = OPCBROWSETYPE.OPC_LEAF;
                }

                server.BrowseOPCItemIDs(browseType, String.Empty, 0, 0, out unknown);
            }
            catch (Exception e)
            {
                ComCallError(methodName, e);
                return(null);
            }
            finally
            {
                EndComCall(methodName);
            }

            // wrapper the enumrator. hardcoding a buffer size of 256.
            return(new EnumString(unknown, 256));
        }
示例#2
0
        public List <string> Browse(OPCBROWSETYPE type = OPCBROWSETYPE.OPC_FLAT, string szFilter = "", short typeFilter = 0, OPCACCESSRIGHTS rightFilter = 0)
        {
            if (_opcBrowser == null)
            {
                return(null);
            }
            List <string> list = new List <string>(14000);

            OPC.Data.Interface.IEnumString enumerator;
            _opcBrowser.BrowseOPCItemIDs(type, szFilter, typeFilter, rightFilter, out enumerator);
            if (enumerator == null)
            {
                return(list);
            }

            int cft = 0;

            string[] strF = new string[1000];
            do
            {
                enumerator.RemoteNext(1000, strF, out cft);
                for (int i = 0; i < cft; i++)
                {
                    list.Add(strF[i]);
                }
            } while (cft > 0);
            Marshal.ReleaseComObject(enumerator);
            enumerator = null;
            list.TrimExcess();
            return(list);
        }
示例#3
0
        // extra helper
        public void Browse(OPCBROWSETYPE typ, out ArrayList lst)
        {
            lst = null;
            UCOMIEnumString enumerator;

            BrowseOPCItemIDs(typ, "", VarEnum.VT_EMPTY, 0, out enumerator);
            if (enumerator == null)
            {
                return;
            }

            lst = new ArrayList(500);
            int cft;

            string[] strF = new string[100];
            int      hresult;

            do
            {
                cft     = 0;
                hresult = enumerator.Next(100, strF, out cft);
                if (cft > 0)
                {
                    for (int i = 0; i < cft; i++)
                    {
                        lst.Add(strF[i]);
                    }
                }
            }while(hresult == HRESULTS.S_OK);

            int rc = Marshal.ReleaseComObject(enumerator);

            enumerator = null;
            lst.TrimToSize();
        }
示例#4
0
        public void Browse(OPCBROWSETYPE typ, out ArrayList lst)
        {
            IEnumString str;

            lst = null;
            this.BrowseOPCItemIDs(typ, "", VarEnum.VT_EMPTY, 0, out str);
            if (str != null)
            {
                int num2;
                lst = new ArrayList(500);
                string[] rgelt = new string[100];
                do
                {
                    //int pceltFetched = 0;
                    IntPtr pceltFetchedPtr = new IntPtr(0);
                    num2 = str.Next(100, rgelt, pceltFetchedPtr);
                    int pceltFetched = pceltFetchedPtr.ToInt32();
                    if (pceltFetched > 0)
                    {
                        for (int i = 0; i < pceltFetched; i++)
                        {
                            lst.Add(rgelt[i]);
                        }
                    }
                }while (num2 == 0);
                int num4 = Marshal.ReleaseComObject(str);
                str = null;
                lst.TrimToSize();
            }
        }
示例#5
0
        public void BrowseOPCItemIDs(OPCBROWSETYPE filterType, string filterCriteria, VarEnum dataTypeFilter, OPCACCESSRIGHTS accessRightsFilter, out IEnumString stringEnumerator)
        {
            object obj2;

            stringEnumerator = null;
            this.ifBrowse.BrowseOPCItemIDs(filterType, filterCriteria, (short)dataTypeFilter, accessRightsFilter, out obj2);
            stringEnumerator = (IEnumString)obj2;
            obj2             = null;
        }
示例#6
0
        public void BrowseOPCItemIDs(OPCBROWSETYPE filterType, string filterCriteria,
                                     VarEnum dataTypeFilter, OPCACCESSRIGHTS accessRightsFilter,
                                     out UCOMIEnumString stringEnumerator)
        {
            stringEnumerator = null;
            object enumtemp;

            ifBrowse.BrowseOPCItemIDs(filterType, filterCriteria, (short)dataTypeFilter, accessRightsFilter, out enumtemp);
            stringEnumerator = (UCOMIEnumString)enumtemp;
            enumtemp         = null;
        }
示例#7
0
            public void BrowseOPCItemIDs(OPCBROWSETYPE dwBrowseFilterType, string szFilterCriteria, short vtDataTypeFilter, int dwAccessRightsFilter, out IEnumString ppIEnumString)
            {
                var methodName = nameof(IOPCBrowseServerAddressSpace) + "." + nameof(IOPCBrowseServerAddressSpace.BrowseOPCItemIDs);

                try
                {
                    var server = BeginComCall <IOPCBrowseServerAddressSpace>(methodName, true);
                    server.BrowseOPCItemIDs(dwBrowseFilterType, szFilterCriteria, vtDataTypeFilter, dwAccessRightsFilter, out ppIEnumString);
                }
                finally
                {
                    EndComCall(methodName);
                }
            }
示例#8
0
        int IOPCBrowseServerAddressSpace.BrowseOPCItemIDs([In, MarshalAs(UnmanagedType.U4)] OPCBROWSETYPE dwBrowseFilterType, [In, MarshalAs(UnmanagedType.LPWStr)] string szFilterCriteria, [In, MarshalAs(UnmanagedType.U2)] short vtDataTypeFilter, [In, MarshalAs(UnmanagedType.U4)] OPCACCESSRIGHTS dwAccessRightsFilter, [MarshalAs(UnmanagedType.IUnknown)] out object ppUnk)
        {
            string currentTestMethod = Dottest.Framework.Stubs.CurrentTestMethod.Name;

            if (currentTestMethod.Equals("TestBrowse01"))
            {
                EnumString enumStr = new EnumString();
                enumStr.Add("DP1");
                enumStr.Add("DP2");
                ppUnk = enumStr;
            }
            else
            {
                ppUnk = null;
            }
            return(1);
        }
示例#9
0
        private void listItems(OPCBROWSETYPE type, out List <string> items, out List <string> paths)
        {
            string szFilter = "";

            items = new List <string>();
            paths = new List <string>();
            int m_Res;

            m_Res = 0;
            object pIEnumString;

            m_Res = m_pIBrowse.BrowseOPCItemIDs(type, szFilter, (int)VarEnum.VT_EMPTY, 0, out pIEnumString);
            if (m_Res >= 0 && pIEnumString != null)
            {
                if (pIEnumString is UCOMIEnumString)
                {
                    int             celt          = 1;
                    string[]        rgelt         = new string[1];
                    int             p_celtFetched = 0;
                    UCOMIEnumString stringArray   = (UCOMIEnumString)pIEnumString;

                    stringArray.Reset();
                    int ret = stringArray.Next(celt, rgelt, out p_celtFetched);


                    while (p_celtFetched > 0)
                    {
                        string path = getFullPath(rgelt[0]);
                        items.Add(rgelt[0]);
                        paths.Add(path);
                        celt          = 1;
                        p_celtFetched = 0;
                        stringArray.Next(celt, rgelt, out p_celtFetched);
                    }
                }
                else
                {
                    throw new Exception("Browser: IEnumString is not found.");
                }
            }
            else
            {
                throw new Exception("Browser: Enumeration Items error.");
            }
        }
示例#10
0
        /// <summary>
        /// Browse items
        /// </summary>
        /// <param name="filterType"><see cref="OPCBROWSETYPE"/> filter, ignored for <see cref="OPCNAMESPACETYPE.OPC_NS_FLAT"/> address space.</param>
        /// <param name="filterCriteria">A server specific filter string.</param>
        /// <param name="dataTypeFilter">Data type filter or <see cref="VarEnum.VT_EMPTY"/></param>
        /// <param name="accessRightsFilter"><see cref="OPCACCESSRIGHTS"/> filter.</param>
        /// <returns></returns>
        public string[] BrowseItemIDs(OPCBROWSETYPE filterType, string filterCriteria,
                                      VarEnum dataTypeFilter, OPCACCESSRIGHTS accessRightsFilter)
        {
            ThrowIfDisposed();
            object enumerator = null;

            try
            {
                opcBrowseServer.BrowseOPCItemIDs(filterType, filterCriteria, (short)dataTypeFilter, accessRightsFilter, out enumerator);
                return(IEnumStringToArray((IEnumString)enumerator));
            }
            finally
            {
                if (enumerator != null)
                {
                    Marshal.ReleaseComObject(enumerator);
                }
            }
        }
示例#11
0
        public void BrowseOPCItemIDs(OPCBROWSETYPE dwBrowseFilterType, string szFilterCriteria, short vtDataTypeFilter, int dwAccessRightsFilter, out IEnumString ppIEnumString)
        {
            lock (this)
            {
                try
                {
                    ItemIdentifier itemID = null;
                    if (m_browseStack.Count > 0)
                    {
                        itemID = (ItemIdentifier)m_browseStack.Peek();
                    }

                    ArrayList arrayList = new ArrayList();
                    Browse(itemID, dwBrowseFilterType, szFilterCriteria, vtDataTypeFilter, dwAccessRightsFilter, arrayList);
                    ppIEnumString = new EnumString(arrayList);
                }
                catch (Exception e)
                {
                    throw CreateException(e);
                }
            }
        }
示例#12
0
 public void BrowseOPCItemIDs(OPCBROWSETYPE dwBrowseFilterType, string szFilterCriteria, short vtDataTypeFilter, int dwAccessRightsFilter, out OpcRcw.Da.IEnumString ppIEnumString)
 {
     OpcCom.Da.Wrapper.Server server;
     Monitor.Enter(server = this);
     try
     {
         ItemIdentifier itemID = null;
         if (this.m_browseStack.Count > 0)
         {
             itemID = (ItemIdentifier)this.m_browseStack.Peek();
         }
         ArrayList hits = new ArrayList();
         this.Browse(itemID, dwBrowseFilterType, szFilterCriteria, vtDataTypeFilter, dwAccessRightsFilter, hits);
         ppIEnumString = new OpcCom.Da.Wrapper.EnumString(hits);
     }
     catch (Exception exception)
     {
         throw CreateException(exception);
     }
     finally
     {
         Monitor.Exit(server);
     }
 }
示例#13
0
 public void BrowseOPCItemIDs(OPCBROWSETYPE dwBrowseFilterType, string szFilterCriteria, short vtDataTypeFilter, int dwAccessRightsFilter, out IEnumString ppIEnumString)
 {
     var methodName = nameof(IOPCBrowseServerAddressSpace) + "." + nameof(IOPCBrowseServerAddressSpace.BrowseOPCItemIDs);
     try
     {
         var server = BeginComCall<IOPCBrowseServerAddressSpace>(methodName, true);
         server.BrowseOPCItemIDs(dwBrowseFilterType, szFilterCriteria, vtDataTypeFilter, dwAccessRightsFilter, out ppIEnumString);
     }
     finally
     {
         EndComCall(methodName);
     }
 }
示例#14
0
        private EnumString GetEnumerator(string itemID, BrowseFilters filters, bool branches, bool flat)
        {
            IOPCBrowseServerAddressSpace iOPCBrowseServerAddressSpace = (IOPCBrowseServerAddressSpace)m_server;

            if (!flat)
            {
                string text = (itemID != null) ? itemID : "";
                try
                {
                    iOPCBrowseServerAddressSpace.ChangeBrowsePosition(OPCBROWSEDIRECTION.OPC_BROWSE_TO, text);
                }
                catch
                {
                    try
                    {
                        iOPCBrowseServerAddressSpace.ChangeBrowsePosition(OPCBROWSEDIRECTION.OPC_BROWSE_DOWN, text);
                    }
                    catch
                    {
                        try
                        {
                            while (true)
                            {
                                iOPCBrowseServerAddressSpace.ChangeBrowsePosition(OPCBROWSEDIRECTION.OPC_BROWSE_UP, string.Empty);
                            }
                        }
                        catch
                        {
                        }

                        string[] array = null;
                        lock (m_separatorsLock)
                        {
                            array = ((m_separators == null) ? text.Split(m_separators) : text.Split(m_separators));
                        }

                        for (int i = 0; i < array.Length; i++)
                        {
                            if (array[i] != null && array[i].Length != 0)
                            {
                                try
                                {
                                    iOPCBrowseServerAddressSpace.ChangeBrowsePosition(OPCBROWSEDIRECTION.OPC_BROWSE_DOWN, array[i]);
                                }
                                catch
                                {
                                    throw new ResultIDException(ResultID.Da.E_UNKNOWN_ITEM_NAME, "Cannot browse because the server is not compliant because it does not support the BROWSE_TO function.");
                                }
                            }
                        }
                    }
                }
            }

            try
            {
                IEnumString   ppIEnumString      = null;
                OPCBROWSETYPE dwBrowseFilterType = branches ? OPCBROWSETYPE.OPC_BRANCH : OPCBROWSETYPE.OPC_LEAF;
                if (flat)
                {
                    dwBrowseFilterType = OPCBROWSETYPE.OPC_FLAT;
                }

                iOPCBrowseServerAddressSpace.BrowseOPCItemIDs(dwBrowseFilterType, (filters.ElementNameFilter != null) ? filters.ElementNameFilter : "", 0, 0, out ppIEnumString);
                return(new EnumString(ppIEnumString));
            }
            catch
            {
                throw new ResultIDException(ResultID.Da.E_UNKNOWN_ITEM_NAME);
            }
        }
        // extra helper
        public void Browse( OPCBROWSETYPE typ, out ArrayList lst )
        {
            lst = null;
            UCOMIEnumString	enumerator;
            BrowseOPCItemIDs( typ, "", VarEnum.VT_EMPTY, 0, out enumerator );
            if( enumerator == null )
            return;

            lst = new ArrayList( 500 );
            int			cft;
            string[]	strF = new string[100];
            int			hresult;
            do
            {
            cft = 0;
            hresult = enumerator.Next( 100, strF, out cft );
            if( cft > 0 )
                {
                for( int i = 0; i < cft; i++ )
                    lst.Add( strF[i] );
                }
            }
            while( hresult == HRESULTS.S_OK );

            int	rc = Marshal.ReleaseComObject( enumerator );
            enumerator = null;
            lst.TrimToSize();
        }
示例#16
0
 /// <summary>
 /// Browse items
 /// </summary>
 /// <param name="filterType"><see cref="OPCBROWSETYPE"/> filter, ignored for <see cref="OPCNAMESPACETYPE.OPC_NS_FLAT"/> address space.</param>
 /// <param name="filterCriteria">A server specific filter string.</param>
 /// <returns></returns>
 public string[] BrowseItemIDs(OPCBROWSETYPE filterType, string filterCriteria)
 {
     return(BrowseItemIDs(filterType, filterCriteria, VarEnum.VT_EMPTY, OPCACCESSRIGHTS.OPC_UNKNOWN));
 }
示例#17
0
 /// <summary>
 /// Browse items
 /// </summary>
 /// <param name="filterType"><see cref="OPCBROWSETYPE"/> filter, ignored for <see cref="OPCNAMESPACETYPE.OPC_NS_FLAT"/> address space.
 /// </param>
 public string[] BrowseItemIDs(OPCBROWSETYPE filterType)
 {
     return(BrowseItemIDs(filterType, String.Empty, VarEnum.VT_EMPTY, 0));
 }
 public void BrowseOPCItemIDs(	OPCBROWSETYPE filterType, string filterCriteria,
     VarEnum dataTypeFilter, OPCACCESSRIGHTS accessRightsFilter,
     out UCOMIEnumString stringEnumerator)
 {
     stringEnumerator = null;
     object	enumtemp;
     ifBrowse.BrowseOPCItemIDs( filterType, filterCriteria, (short) dataTypeFilter, accessRightsFilter, out enumtemp );
     stringEnumerator = (UCOMIEnumString) enumtemp;
     enumtemp = null;
 }
示例#19
0
        private void Browse(ItemIdentifier itemID, OPCBROWSETYPE dwBrowseFilterType, string szFilterCriteria, short vtDataTypeFilter, int dwAccessRightsFilter, ArrayList hits)
        {
            BrowseFilters filters = new BrowseFilters {
                MaxElementsReturned = 0,
                BrowseFilter        = browseFilter.all,
                ElementNameFilter   = (dwBrowseFilterType != OPCBROWSETYPE.OPC_FLAT) ? szFilterCriteria : "",
                VendorFilter        = null,
                ReturnAllProperties = false
            };

            filters.PropertyIDs          = new PropertyID[] { Property.DATATYPE, Property.ACCESSRIGHTS };
            filters.ReturnPropertyValues = true;
            BrowseElement[] elementArray = null;
            try
            {
                Opc.Da.BrowsePosition position = null;
                elementArray = this.m_server.Browse(itemID, filters, out position);
                if (position != null)
                {
                    position.Dispose();
                    position = null;
                }
            }
            catch
            {
                throw new ExternalException("BrowseOPCItemIDs", -2147467259);
            }
            foreach (BrowseElement element in elementArray)
            {
                if (dwBrowseFilterType == OPCBROWSETYPE.OPC_FLAT)
                {
                    if (element.HasChildren)
                    {
                        this.Browse(new ItemIdentifier(element.ItemName), dwBrowseFilterType, szFilterCriteria, vtDataTypeFilter, dwAccessRightsFilter, hits);
                    }
                }
                else
                {
                    if (dwBrowseFilterType == OPCBROWSETYPE.OPC_BRANCH)
                    {
                        if (element.HasChildren)
                        {
                            goto Label_00F9;
                        }
                        continue;
                    }
                    if ((dwBrowseFilterType == OPCBROWSETYPE.OPC_LEAF) && element.HasChildren)
                    {
                        continue;
                    }
                }
Label_00F9:
                if (element.IsItem)
                {
                    if (vtDataTypeFilter != 0)
                    {
                        short type = (short)OpcCom.Interop.GetType((System.Type)element.Properties[0].Value);
                        if (type != vtDataTypeFilter)
                        {
                            continue;
                        }
                    }
                    if (dwAccessRightsFilter != 0)
                    {
                        accessRights rights = (accessRights)element.Properties[1].Value;
                        if (((dwAccessRightsFilter == 1) && (rights == accessRights.writable)) || ((dwAccessRightsFilter == 2) && (rights == accessRights.readable)))
                        {
                            continue;
                        }
                    }
                }
                if (dwBrowseFilterType != OPCBROWSETYPE.OPC_FLAT)
                {
                    hits.Add(element.Name);
                }
                else if (element.IsItem && ((szFilterCriteria.Length == 0) || Opc.Convert.Match(element.ItemName, szFilterCriteria, true)))
                {
                    hits.Add(element.ItemName);
                }
            }
        }