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); } }
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); }
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); }
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); }
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); }
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); }
//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"); }
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); }
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); }
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); }
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); }
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); }
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); }