/// <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_); }
/// <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); }
/// <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); }
OpcServer[] GetRegistredServers(OpcSpecification specification, string url) { return OpcDiscovery.GetServers(specification, url).ToArray(); }