/// <summary>
        /// Displays all servers that support the specified specification.
        /// </summary>
        public void ShowAllServers(OpcSpecification specification, TsCDaBrowseFilters filters)
        {
            Clear();

            m_specification = specification;
            m_filters       = (filters == null)?new TsCDaBrowseFilters():filters;

            BrowseTV.ContextMenu = PopupMenu;

            m_localServers                    = new TreeNode("Local Servers");
            m_localServers.ImageIndex         = Resources.IMAGE_LOCAL_COMPUTER;
            m_localServers.SelectedImageIndex = Resources.IMAGE_LOCAL_COMPUTER;
            m_localServers.Tag                = null;

            BrowseServers(m_localServers);
            BrowseTV.Nodes.Add(m_localServers);

            m_localNetwork                    = new TreeNode("Local Network");
            m_localNetwork.ImageIndex         = Resources.IMAGE_LOCAL_NETWORK;
            m_localNetwork.SelectedImageIndex = Resources.IMAGE_LOCAL_NETWORK;
            m_localNetwork.Tag                = null;

            BrowseNetwork(m_localNetwork);
            BrowseTV.Nodes.Add(m_localNetwork);
        }
        /// <summary>
        /// Displays all servers that support the specified specification.
        /// </summary>
        public void ShowAllServers(OpcSpecification specification, TsCDaBrowseFilters filters)
        {
            Clear();

            mSpecification_ = specification;
            mFilters_       = (filters == null)?new TsCDaBrowseFilters():filters;

            browseTv_.ContextMenuStrip = popupMenu_;

            mLocalServers_                    = new TreeNode("Local Servers");
            mLocalServers_.ImageIndex         = Resources.IMAGE_LOCAL_COMPUTER;
            mLocalServers_.SelectedImageIndex = Resources.IMAGE_LOCAL_COMPUTER;
            mLocalServers_.Tag                = null;

            BrowseServers(mLocalServers_);
            browseTv_.Nodes.Add(mLocalServers_);

            //localNetwork_                    = new TreeNode("Local Network");
            //localNetwork_.ImageIndex         = Resources.IMAGE_LOCAL_NETWORK;
            //localNetwork_.SelectedImageIndex = Resources.IMAGE_LOCAL_NETWORK;
            //localNetwork_.Tag                = null;

            //BrowseNetwork(localNetwork_);
            //browseTv_.Nodes.Add(localNetwork_);
        }
예제 #3
0
        /// <summary>
        /// Prompts the use to select a server with the specified specification.
        /// </summary>
        public TsCDaServer ShowDialog(OpcSpecification specification)
        {
            specificationCb_.SelectedItem = specification;

            if (ShowDialog() != DialogResult.OK)
            {
                serversCtrl_.Clear();
                return(null);
            }

            TsCDaServer server = serversCtrl_.SelectedServer;

            serversCtrl_.Clear();
            return(server);
        }
        /// <summary>
        /// Prompts the use to select a server with the specified specification.
        /// </summary>
        public TsCDaServer ShowDialog(OpcSpecification specification)
        {
            SpecificationCB.SelectedItem = specification;

            if (ShowDialog() != DialogResult.OK)
            {
                ServersCTRL.Clear();
                return(null);
            }

            TsCDaServer server = ServersCTRL.SelectedServer;

            ServersCTRL.Clear();
            return(server);
        }
예제 #5
0
        /// <summary>
        /// Initializes the control with a set of known urls.
        /// </summary>
        public void Initialize(OpcUrl[] knownUrls, int selectedIndex, OpcSpecification specification)
        {
            // store the default specification.
            m_specification = specification;

            // clear the existing items.
            ServerUrlCB.Items.Clear();

            // add a 'special' item that shows the browse servers dialog.
            ServerUrlCB.Items.Add("<Browse...>");

            // add known urls.
            if (knownUrls != null && knownUrls.Length > 0)
            {
                ServerUrlCB.Items.AddRange(knownUrls);
            }

            // update the selection.
            if (selectedIndex < ServerUrlCB.Items.Count - 1)
            {
                ServerUrlCB.SelectedIndex = (selectedIndex != -1)?selectedIndex + 1:1;
            }
        }
        /// <summary>
        /// Returns a list of servers that support the specified specification on the specified host.
        /// </summary>
        public OpcServer[] GetAvailableServers(OpcSpecification specification, string host, OpcConnectData connectData)
        {
            lock (this)
            {
                NetworkCredential credentials = (connectData != null)?connectData.GetCredential(null, null):null;

                // connect to the server.
                m_server = (IOPCServerList2)Interop.CreateInstance(CLSID, host, credentials);
                m_host   = host;

                try
                {
                    ArrayList servers = new ArrayList();

                    // convert the interface version to a guid.
                    Guid catid = new Guid(specification.Id);

                    // get list of servers in the specified specification.
                    IOPCEnumGUID enumerator = null;

                    m_server.EnumClassesOfCategories(
                        1,
                        new Guid[] { catid },
                        0,
                        null,
                        out enumerator);

                    // read clsids.
                    Guid[] clsids = ReadClasses(enumerator);

                    // release enumerator object.
                    Interop.ReleaseServer(enumerator);
                    enumerator = null;

                    // fetch class descriptions.
                    foreach (Guid clsid in clsids)
                    {
                        Factory factory = new Factory();

                        try
                        {
                            OpcUrl url = CreateUrl(specification, clsid);

                            OpcServer server = null;

                            if (specification == OpcSpecification.OPC_DA_30)
                            {
                                server = new TsCDaServer(factory, url);
                            }

                            else if (specification == OpcSpecification.OPC_DA_20)
                            {
                                server = new TsCDaServer(factory, url);
                            }

                            else if (specification == OpcSpecification.OPC_AE_10)
                            {
                                server = new TsCAeServer(factory, url);
                            }

                            else if (specification == OpcSpecification.OPC_HDA_10)
                            {
                                server = new TsCHdaServer(factory, url);
                            }

                            servers.Add(server);
                        }
                        catch (Exception)
                        {
                            // ignore bad clsids.
                        }
                    }

                    return((OpcServer[])servers.ToArray(typeof(OpcServer)));
                }
                finally
                {
                    // free the server.
                    Interop.ReleaseServer(m_server);
                    m_server = null;
                }
            }
        }
 /// <summary>
 /// Returns a list of servers that support the specified interface specification.
 /// </summary>
 public OpcServer[] GetAvailableServers(OpcSpecification specification)
 {
     return(GetAvailableServers(specification, null, null));
 }
        /// <summary>
        /// Reads the server details from the enumerator.
        /// </summary>
        OpcUrl CreateUrl(OpcSpecification specification, Guid clsid)
        {
            // initialize the server url.
            OpcUrl url = new OpcUrl();

            url.HostName = m_host;
            url.Port     = 0;
            url.Path     = null;

            if (specification == OpcSpecification.OPC_DA_30)
            {
                url.Scheme = OpcUrlScheme.DA;
            }
            else if (specification == OpcSpecification.OPC_DA_20)
            {
                url.Scheme = OpcUrlScheme.DA;
            }
            else if (specification == OpcSpecification.OPC_DA_10)
            {
                url.Scheme = OpcUrlScheme.DA;
            }
            else if (specification == OpcSpecification.OPC_AE_10)
            {
                url.Scheme = OpcUrlScheme.AE;
            }
            else if (specification == OpcSpecification.OPC_HDA_10)
            {
                url.Scheme = OpcUrlScheme.HDA;
            }

            try
            {
                // fetch class details from the enumerator.
                string progID       = null;
                string description  = null;
                string verIndProgID = null;

                m_server.GetClassDetails(
                    ref clsid,
                    out progID,
                    out description,
                    out verIndProgID);

                // create the server URL path.
                if (verIndProgID != null)
                {
                    url.Path = String.Format("{0}/{1}", verIndProgID, "{" + clsid.ToString() + "}");
                }
                else if (progID != null)
                {
                    url.Path = String.Format("{0}/{1}", progID, "{" + clsid.ToString() + "}");
                }
            }
            catch (Exception)
            {
                // bad value in registry.
            }
            finally
            {
                // default to the clsid if the prog is not known.
                if (url.Path == null)
                {
                    url.Path = String.Format("{0}", "{" + clsid.ToString() + "}");
                }
            }

            // return the server url.
            return(url);
        }
예제 #9
0
		OpcServer[] GetRegistredServers(OpcSpecification specification, string url)
		{
			return OpcDiscovery.GetServers(specification, url).ToArray();
		}