Пример #1
0
        private CallResourceResponse IsNodePresent(CallResourceRequest request, Session connection, NameValueCollection queryParams, NamespaceTable nsTable)
        {
            CallResourceResponse response = new CallResourceResponse();

            string nodeId = HttpUtility.UrlDecode(queryParams["nodeId"]);

            try
            {
                var nId = Converter.GetNodeId(nodeId, nsTable);

                var readRes = connection.ReadAttributes(nId, new[] { Opc.Ua.Attributes.BrowseName });

                bool present = readRes.Length > 0;

                var result = JsonSerializer.Serialize(present);
                response.Code = 200;
                response.Body = ByteString.CopyFrom(result, Encoding.ASCII);
                _log.LogDebug($"We got a result for '{nodeId}' from IsNodePresent => {0}", result);

                return(response);
            }
            catch (Exception e)
            {
                _log.LogDebug($"IsNodePresent for '{nodeId}' is false: ", e.Message);
                var result = JsonSerializer.Serialize(false);
                response.Code = 200;
                response.Body = ByteString.CopyFrom(result, Encoding.ASCII);
                return(response);
            }
        }
Пример #2
0
        private CallResourceResponse RemoveDashboardmapping(CallResourceRequest request, Session connection, NameValueCollection queryParams, NamespaceTable nsTable)
        {
            CallResourceResponse response = new CallResourceResponse();
            string nodeId     = HttpUtility.UrlDecode(queryParams["nodeId"]);
            string typeNodeId = HttpUtility.UrlDecode(queryParams["typeNodeId"]);
            bool   useType    = bool.Parse(HttpUtility.UrlDecode(queryParams["useType"]));

            string[] interfaces  = JsonSerializer.Deserialize <string[]>(HttpUtility.UrlDecode(queryParams["interfaces"]));
            string   perspective = HttpUtility.UrlDecode(queryParams["perspective"]);

            var nodeIdJson     = ConvertNodeIdToJson(nodeId, nsTable);
            var typeNodeIdJson = ConvertNodeIdToJson(typeNodeId, nsTable);

            var interfacesIds = Array.Empty <string>();

            if (interfaces != null)
            {
                interfacesIds = interfaces.Select(a => ConvertNodeIdToJson(a, nsTable)).ToArray();
            }

            var dashboardMappingData = new DashboardMappingData(connection, nodeId, nodeIdJson, typeNodeIdJson, useType, interfacesIds, null, null, perspective, nsTable);
            var r      = _dashboardResolver.RemoveDashboardMapping(dashboardMappingData);
            var result = JsonSerializer.Serialize(r);

            response.Code = 200;
            response.Body = ByteString.CopyFrom(result, Encoding.ASCII);
            _log.LogDebug("Remove dashboard mapping => {0}", r.success);
            return(response);
        }
Пример #3
0
        private CallResourceResponse ReadNode(CallResourceRequest request, Session connection, NameValueCollection queryParams, NamespaceTable nsTable)
        {
            CallResourceResponse response = new CallResourceResponse();
            string nodeId   = HttpUtility.UrlDecode(queryParams["nodeId"]);
            var    nodeInfo = ReadNodeInfo(connection, nsTable, nodeId);
            var    result   = JsonSerializer.Serialize(nodeInfo);

            response.Code = 200;
            response.Body = ByteString.CopyFrom(result, Encoding.ASCII);
            return(response);
        }
Пример #4
0
        private CallResourceResponse BrowseTypes(CallResourceRequest request, Session connection, NameValueCollection queryParams, NamespaceTable nsTable)
        {
            CallResourceResponse response = new CallResourceResponse();
            string nodeId       = HttpUtility.UrlDecode(queryParams["nodeId"]);
            var    nId          = Converter.GetNodeId(nodeId, nsTable);
            var    browseResult = connection.Browse(nId, (uint)(Opc.Ua.NodeClass.ObjectType | Opc.Ua.NodeClass.VariableType));
            var    result       = JsonSerializer.Serialize(browseResult.Select(a => Converter.ConvertToBrowseResult(a, nsTable)).ToArray());

            response.Code = 200;
            response.Body = ByteString.CopyFrom(result, Encoding.ASCII);
            _log.LogDebug("We got a result from browse => {0}", result);
            return(response);
        }
Пример #5
0
        private CallResourceResponse GetNodePath(CallResourceRequest request, Session connection, NameValueCollection queryParams, NamespaceTable nsTable)
        {
            CallResourceResponse response = new CallResourceResponse();
            string nodeId = HttpUtility.UrlDecode(queryParams["nodeId"]);

            if (string.IsNullOrEmpty(nodeId))
            {
                response.Code = 200;
                response.Body = ByteString.CopyFrom("", Encoding.ASCII);
                return(response);
            }

            string rootId = HttpUtility.UrlDecode(queryParams["rootId"]);
            var    nId    = Converter.GetNodeId(nodeId, nsTable);
            var    rId    = ObjectIds.RootFolder;

            if (!string.IsNullOrEmpty(rootId))
            {
                rId = Converter.GetNodeId(rootId, nsTable);
            }
            var readRes = connection.ReadAttributes(nId, new[] { Opc.Ua.Attributes.BrowseName, Opc.Ua.Attributes.DisplayName, Opc.Ua.Attributes.NodeClass });

            if (!readRes[0].Success)
            {
                throw new ArgumentException(readRes[0].Error + " StatusCode: " + readRes[0].StatusCode.ToString());
            }

            var browseName  = (Opc.Ua.QualifiedName)readRes[0].Value;
            var displayName = (Opc.Ua.LocalizedText)readRes[1].Value;
            var nodeClass   = (Opc.Ua.NodeClass)readRes[2].Value;
            var nodePath    = FindBrowsePath(connection, nId, rId, browseName, nsTable);

            var nodeInfo = new NodeInfo()
            {
                browseName  = Converter.GetQualifiedName(browseName, nsTable),
                displayName = displayName.Text,
                nodeClass   = (uint)nodeClass,
                nodeId      = Converter.GetNodeIdAsJson(nId, nsTable)
            };

            var np = new NodePath()
            {
                node = nodeInfo, browsePath = nodePath
            };
            var result = JsonSerializer.Serialize(np);

            response.Code = 200;
            response.Body = ByteString.CopyFrom(result, Encoding.ASCII);
            return(response);
        }
Пример #6
0
        private CallResourceResponse GetTypeDefinition(CallResourceRequest request, Session connection, NameValueCollection queryParams, NamespaceTable nsTable)
        {
            CallResourceResponse response = new CallResourceResponse();
            string nodeId = HttpUtility.UrlDecode(queryParams["nodeId"]);
            var    nId    = Converter.GetNodeId(nodeId, nsTable);

            connection.Browse(null, null, nId, 1, Opc.Ua.BrowseDirection.Forward, "i=40", true, (uint)(Opc.Ua.NodeClass.ObjectType | Opc.Ua.NodeClass.VariableType), out byte[] cont, out Opc.Ua.ReferenceDescriptionCollection references);
            var result = JsonSerializer.Serialize(Converter.ConvertToBrowseResult(references[0], nsTable));

            response.Code = 200;
            response.Body = ByteString.CopyFrom(result, Encoding.ASCII);
            _log.LogDebug("We got a result from browse => {0}", result);
            return(response);
        }
Пример #7
0
        //getNamespaceIndices
        private CallResourceResponse GetNamespaceIndices(CallResourceRequest request, Session connection, NameValueCollection queryParams, NamespaceTable nsTable)
        {
            CallResourceResponse response = new CallResourceResponse();
            var nodeId = Variables.Server_NamespaceArray;
            var dv     = connection.ReadValue(nodeId);

            if (Opc.Ua.StatusCode.IsGood(dv.StatusCode))
            {
                var ns     = dv.Value as string[];
                var result = JsonSerializer.Serialize(ns);
                response.Code = 200;
                response.Body = ByteString.CopyFrom(result, Encoding.ASCII);
                return(response);
            }
            throw new Exception("Could not read namespace array");
        }
Пример #8
0
        private CallResourceResponse GetNamespaces(CallResourceRequest request, Session connection, NameValueCollection queryParams, NamespaceTable nsTable)
        {
            CallResourceResponse response = new CallResourceResponse();

            string[] namespaces = new string[nsTable.Count];
            for (uint i = 0; i < nsTable.Count; i++)
            {
                namespaces[i] = nsTable.GetString(i);
            }

            var result = JsonSerializer.Serialize(namespaces);

            response.Code = 200;
            response.Body = ByteString.CopyFrom(result, Encoding.ASCII);

            return(response);
        }
Пример #9
0
        private CallResourceResponse GetDashboard(CallResourceRequest request, Session connection, NameValueCollection queryParams, NamespaceTable nsTable)
        {
            CallResourceResponse response = new CallResourceResponse();
            string nodeId      = HttpUtility.UrlDecode(queryParams["nodeId"]);
            string perspective = HttpUtility.UrlDecode(queryParams["perspective"]);

            var targetNodeIdJson = ConvertNodeIdToJson(nodeId, nsTable);

            (string dashboard, string[] dashKeys) = _dashboardResolver.ResolveDashboard(connection, nodeId, targetNodeIdJson, perspective, nsTable);
            var dashboardInfo = new DashboardInfo()
            {
                name = dashboard, dashKeys = dashKeys
            };
            var result = JsonSerializer.Serialize(dashboardInfo);

            response.Code = 200;
            response.Body = ByteString.CopyFrom(result, Encoding.ASCII);
            _log.LogDebug("We got a dash => {0}", dashboard);

            return(response);
        }
Пример #10
0
        private CallResourceResponse Browse(CallResourceRequest request, Session connection, NameValueCollection queryParams, NamespaceTable nsTable)
        {
            CallResourceResponse response = new CallResourceResponse();
            string nodeId = HttpUtility.UrlDecode(queryParams["nodeId"]);
            var    mask   = queryParams["nodeClassMask"];

            string       filter       = queryParams["browseFilter"];
            BrowseFilter browseFilter = null;

            if (!string.IsNullOrEmpty(filter))
            {
                browseFilter = JsonSerializer.Deserialize <BrowseFilter>(filter);
            }

            var  hasMask       = !string.IsNullOrWhiteSpace(mask);
            uint nodeClassMask = 0;

            if (hasMask)
            {
                if (!uint.TryParse(mask, out nodeClassMask))
                {
                    hasMask = false;
                }
            }
            var nId = Converter.GetNodeId(nodeId, nsTable);
            IEnumerable <ReferenceDescription> browseResult = connection.Browse(nId, hasMask ? nodeClassMask : (int)(NodeClass.Object | NodeClass.Variable), GetMaxResults(browseFilter));

            if (!string.IsNullOrEmpty(browseFilter?.browseName))
            {
                browseResult = browseResult.Where(a => a.BrowseName.Name.Contains(browseFilter.browseName));
            }

            var result = JsonSerializer.Serialize(browseResult.Select(a => Converter.ConvertToBrowseResult(a, nsTable)).OrderBy(refdesc => refdesc.displayName).ToArray());

            response.Code = 200;
            response.Body = ByteString.CopyFrom(result, Encoding.ASCII);
            _log.LogDebug("We got a result from browse => {0}", result);
            return(response);
        }
Пример #11
0
        private CallResourceResponse BrowseEventFields(CallResourceRequest request, Session connection, NameValueCollection queryParams, NamespaceTable nsTable)
        {
            CallResourceResponse response = new CallResourceResponse();
            string nodeId       = HttpUtility.UrlDecode(queryParams["nodeId"]);
            var    nId          = Converter.GetNodeId(nodeId, nsTable);
            var    browseResult = connection.Browse(nId, (uint)(Opc.Ua.NodeClass.Variable));
            NodeId superType    = null;

            while ((superType = GetSuperType(connection, nId, nsTable)) != null)
            {
                var superBrowseResult = connection.Browse(superType, (uint)(Opc.Ua.NodeClass.Variable));
                browseResult.AddRange(superBrowseResult);
                nId = superType;
            }
            var ordered = browseResult.Select(a => Converter.ConvertToBrowseResult(a, nsTable)).OrderBy(a => a.browseName.name).ToArray();
            var result  = JsonSerializer.Serialize(ordered);

            response.Code = 200;
            response.Body = ByteString.CopyFrom(result, Encoding.ASCII);
            _log.LogDebug("We got a result from browse => {0}", result);
            return(response);
        }
Пример #12
0
        private CallResourceResponse TranslateBrowsePathToNode(CallResourceRequest request, Session connection, NameValueCollection queryParams, NamespaceTable nsTable)
        {
            CallResourceResponse response = new CallResourceResponse();
            var body = request.Body.ToString(Encoding.UTF8);
            var relativeBrowsePath = JsonSerializer.Deserialize <RelativeBrowsePath>(body);
            var rootId             = relativeBrowsePath.startNode;
            var bp = relativeBrowsePath.browsePath;

            var bpColl = new BrowsePathCollection();

            var browsePath = new BrowsePath();

            browsePath.StartingNode = Converter.GetNodeId(rootId, nsTable);
            var relativePaths = bp.Select(qm => new RelativePathElement()
            {
                TargetName = Converter.GetQualifiedName(qm, nsTable), IsInverse = false, IncludeSubtypes = true, ReferenceTypeId = Opc.Ua.ReferenceTypeIds.HierarchicalReferences
            });

            browsePath.RelativePath.Elements.AddRange(relativePaths);
            bpColl.Add(browsePath);
            connection.TranslateBrowsePathsToNodeIds(null, bpColl, out BrowsePathResultCollection results, out DiagnosticInfoCollection diagnosticInfos);
            if (Opc.Ua.StatusCode.IsBad(results[0].StatusCode))
            {
                throw new ArgumentException(results[0].StatusCode.ToString());
            }
            if (results[0].Targets.Count == 0)
            {
                throw new ArgumentException("Could find node for browse path.");
            }
            var nodeId = ExpandedNodeId.ToNodeId(results[0].Targets[0].TargetId, nsTable);

            var nodeInfo = ReadNodeInfo(connection, nsTable, Converter.GetNodeIdAsJson(nodeId, nsTable));
            var result   = JsonSerializer.Serialize(nodeInfo);

            response.Code = 200;
            response.Body = ByteString.CopyFrom(result, Encoding.ASCII);
            return(response);
        }
Пример #13
0
        private CallResourceResponse RemoveDashboardmappingByKeys(CallResourceRequest request, Session connection, NameValueCollection queryParams, NamespaceTable nsTable)
        {
            CallResourceResponse response = new CallResourceResponse();

            string[] dashKeys    = JsonSerializer.Deserialize <string[]>(HttpUtility.UrlDecode(queryParams["dashKeys"]));
            string   perspective = HttpUtility.UrlDecode(queryParams["perspective"]);

            var dashKeysIds = Array.Empty <string>();

            if (dashKeys != null)
            {
                dashKeysIds = dashKeys.Select(a => ConvertNodeIdToJson(a, nsTable)).ToArray();
            }

            var dashboardMappingData = new DashboardMappingData(connection, null, null, null, false, dashKeysIds, null, null, perspective, nsTable);
            var r      = _dashboardResolver.RemoveDashboardMapping(dashboardMappingData);
            var result = JsonSerializer.Serialize(r);

            response.Code = 200;
            response.Body = ByteString.CopyFrom(result, Encoding.ASCII);
            _log.LogDebug("Remove dashboard mapping => {0}", r.success);
            return(response);
        }