예제 #1
0
        private void CallToolStripMenuItemClick(object sender, EventArgs e)
        {
            inputArgumentsPanel.Controls.Clear();
            outputArgumentsPanel.Controls.Clear();
            _selectedObjectId = null;
            _selectedMethodId = null;
            if (!(_selectedTreeNode?.Tag is AttributeData attributeData))
            {
                return;
            }
            if (!(_selectedTreeNode.Parent?.Tag is AttributeData parentAttributeData))
            {
                return;
            }
            _selectedObjectId = parentAttributeData.NodeId;
            _selectedMethodId = attributeData.NodeId;

            ExtendedDataDescription methodReference = _applicationInstanceManager.FlatExtendedDataDescriptionDictionary[attributeData.NodeId.Identifier.ToString()];
            //extract input/output descriptions
            DataDescription inputDataDescription = methodReference.VariableDataDescriptions.FirstOrDefault(x =>
                                                                                                           x.AttributeData.BrowseName.Name == NameVariables.InputArguments);
            DataDescription outputDataDescription = methodReference.VariableDataDescriptions.FirstOrDefault(x =>
                                                                                                            x.AttributeData.BrowseName.Name == NameVariables.OutputArguments);

            //get all argument information
            ExtensionObject[] inputExtensionObjects =
                (ExtensionObject[])inputDataDescription?.AttributeData.Value.Value;
            ExtensionObject[] outputExtensionObjects =
                (ExtensionObject[])outputDataDescription?.AttributeData.Value.Value;

            callMethodButton.Enabled = true;
            if (inputExtensionObjects != null)
            {
                foreach (ExtensionObject extensionObject in inputExtensionObjects)
                {
                    Argument argument     = (Argument)extensionObject.Body;
                    Variant  defaultValue = new Variant(TypeInfo.GetDefaultValue(argument.DataType, argument.ValueRank));
                    if (defaultValue.Value == null)
                    {
                        defaultValue.Value = "";
                    }
                    AddInputArgumentUserControl(defaultValue.Value?.ToString(), argument.Description.Text, argument.Name,
                                                defaultValue.TypeInfo);
                }
            }
            if (outputExtensionObjects == null)
            {
                return;
            }
            foreach (ExtensionObject extensionObject in outputExtensionObjects)
            {
                Argument argument     = (Argument)extensionObject.Body;
                Variant  defaultValue = new Variant(TypeInfo.GetDefaultValue(argument.DataType, argument.ValueRank));
                AddOutputArgumentUserControl(defaultValue.Value?.ToString(), argument.Description.Text, argument.Name,
                                             defaultValue.TypeInfo);
            }
        }
예제 #2
0
        private void ObjectTreeViewMouseDoubleClick(object sender, MouseEventArgs e)
        {
            attributesListView.Items.Clear();
            TreeNode parentNode = objectTreeView.SelectedNode;

            if (parentNode == null)
            {
                return;
            }
            if (!(parentNode?.Tag is AttributeData parentNodeAttributeData))
            {
                return;
            }
            if (!_applicationInstanceManager.FlatExtendedDataDescriptionDictionary.ContainsKey(parentNodeAttributeData.NodeId.Identifier.ToString()))
            {
                return;
            }
            ExtendedDataDescription objectReference = _applicationInstanceManager.FlatExtendedDataDescriptionDictionary[parentNodeAttributeData.NodeId.Identifier.ToString()];

            PopulateAttributeListView(parentNodeAttributeData);

            TreeNode[] browsedObjects;
            if (objectReference.MethodDataDescriptions != null)
            {
                browsedObjects = (from x in objectReference.MethodDataDescriptions
                                  select new TreeNode(x.DataDescription.ReferenceDescription.BrowseName.Name, 0, 0)
                {
                    Name = x.DataDescription.ReferenceDescription.BrowseName.Name,
                    Tag = x.DataDescription.AttributeData
                }).ToArray();
                PopulateTreeNode(parentNode, browsedObjects);
            }
            if (objectReference.VariableDataDescriptions != null)
            {
                browsedObjects = (from x in objectReference.VariableDataDescriptions
                                  select new TreeNode(x.ReferenceDescription.BrowseName.Name, 1, 1)
                {
                    Name = x.ReferenceDescription.BrowseName.Name,
                    Tag = x.AttributeData
                }).ToArray();
                PopulateTreeNode(parentNode, browsedObjects);
            }
            if (objectReference.ObjectDataDescriptions == null)
            {
                return;
            }
            browsedObjects = (from x in objectReference.ObjectDataDescriptions
                              select new TreeNode(x.DataDescription.ReferenceDescription.BrowseName.Name, 2, 2)
            {
                Name = x.DataDescription.ReferenceDescription.BrowseName.Name,
                Tag = x.DataDescription.AttributeData
            }).ToArray();
            PopulateTreeNode(parentNode, browsedObjects);
        }
예제 #3
0
        private void Connect(bool connectToServer = false)
        {
            try
            {
                connectButton.Enabled    = false;
                disconnectButton.Enabled = true;
                objectTreeView.Nodes.Clear();
                objectTreeView.Enabled = false;
                if (!connectToServer)
                {
                    _applicationInstanceManager = new ApplicationInstanceManager(ApplicationName, ApplicationUri,
                                                                                 null, null, null, null, _globalDiscoveryServerUrls, _globalDiscoveryServerWellKnownUrls,
                                                                                 _applicationType, true);
                }

                if (globalDiscoveryServerUseCheckBox.Checked && !connectToServer)
                {
                    globalDiscoveryServerConnectionStatusPanel.BackColor = Color.Red;
                    string gdsUserName = globalDiscoveryServerUseSecurityCheckBox.Checked
                        ? globalDiscoveryServerUserNameTextBox.Text
                        : null;
                    string gdsUserPassword = globalDiscoveryServerUseSecurityCheckBox.Checked
                        ? globalDiscoveryServerPasswordTextBox.Text
                        : null;
                    bool connectedToGDS =
                        _applicationInstanceManager.ConnectToGlobalDiscoveryServer(
                            globalDiscoveryServerDiscoveryURLTextBox.Text, gdsUserName, gdsUserPassword);
                    if (!connectedToGDS)
                    {
                        Disconnect();
                        return;
                    }

                    if (registerApplicationCheckBox.Checked)
                    {
                        _applicationInstanceManager.RegisterApplication();
                    }
                    if (requestNewCertificateCheckBox.Checked)
                    {
                        _applicationInstanceManager.RequestNewCertificatePullMode();
                    }
                    List <ServerOnNetwork> serversOnNetwork = _applicationInstanceManager.QueryServers();
                    discoveredServersListView.Items.Clear();
                    if (serversOnNetwork == null || !serversOnNetwork.Any())
                    {
                        Disconnect();
                        return;
                    }

                    ListViewItem[] discoveredServersListViewItems =
                        (from x in serversOnNetwork select new ListViewItem(x.DiscoveryUrl)).ToArray();
                    discoveredServersListView.Items.AddRange(discoveredServersListViewItems);
                    globalDiscoveryServerConnectionStatusPanel.BackColor = Color.Green;
                }

                if (!connectToServer && globalDiscoveryServerUseCheckBox.Checked)
                {
                    return;
                }
                connectionStatusPanel.BackColor = Color.Red;
                string userName          = useSecurityCheckBox.Checked ? serverUserNameTextBox.Text : null;
                string userPassword      = useSecurityCheckBox.Checked ? serverPasswordTextBox.Text : null;
                bool   connectedToServer =
                    _applicationInstanceManager.ConnectToServer(serverDiscoveryURLTextBox.Text, userName, userPassword);
                _applicationInstanceManager.GetRootExtendedDataDescriptions();
                if (!connectedToServer)
                {
                    return;
                }

                List <TreeNode> browsedObjects = new List <TreeNode>();
                if (_applicationInstanceManager.FlatExtendedDataDescriptionDictionary.ContainsKey(ObjectIds.ObjectsFolder.Identifier.ToString()))
                {
                    ExtendedDataDescription objectReference = _applicationInstanceManager.FlatExtendedDataDescriptionDictionary[ObjectIds.ObjectsFolder.Identifier.ToString()];
                    browsedObjects.Add(new TreeNode()
                    {
                        Text = objectReference.DataDescription.AttributeData.BrowseName.Name,
                        Tag  = objectReference.DataDescription.AttributeData
                    });
                }
                if (_applicationInstanceManager.FlatExtendedDataDescriptionDictionary.ContainsKey(ObjectIds.TypesFolder.Identifier.ToString()))
                {
                    ExtendedDataDescription typesReference = _applicationInstanceManager.FlatExtendedDataDescriptionDictionary[ObjectIds.TypesFolder.Identifier.ToString()];
                    browsedObjects.Add(new TreeNode()
                    {
                        Text = typesReference.DataDescription.AttributeData.BrowseName.Name,
                        Tag  = typesReference.DataDescription.AttributeData
                    });
                }
                if (_applicationInstanceManager.FlatExtendedDataDescriptionDictionary.ContainsKey(ObjectIds.ViewsFolder.Identifier.ToString()))
                {
                    ExtendedDataDescription viewReference = _applicationInstanceManager.FlatExtendedDataDescriptionDictionary[ObjectIds.ViewsFolder.Identifier.ToString()];
                    browsedObjects.Add(new TreeNode()
                    {
                        Text = viewReference.DataDescription.AttributeData.BrowseName.Name,
                        Tag  = viewReference.DataDescription.AttributeData
                    });
                }
                objectTreeView.Enabled = true;
                objectTreeView.Nodes.AddRange(browsedObjects.ToArray());
                connectionStatusPanel.BackColor = Color.Green;
            }
            catch (Exception exception)
            {
                Console.WriteLine(exception);
                Disconnect();
            }
        }