Example #1
0
        /// <summary>
        /// MethodCallAsync
        /// </summary>
        /// <param name="parameterValues"></param>
        /// <param name="nodeId"></param>
        /// <returns>Status</returns>
        public async Task <string> MethodCallAsync(MethodMetadataResponseApiModel parameters, string[] parameterValues,
                                                   string endpointId, string nodeId, CredentialModel credential = null)
        {
            var argumentsList = new List <MethodCallArgumentApiModel>();
            var model         = new MethodCallRequestApiModel()
            {
                MethodId = nodeId,
                ObjectId = parameters.ObjectId
            };

            model.Header = Elevate(new RequestHeaderApiModel(), credential);

            try {
                var count = 0;
                foreach (var item in parameters.InputArguments)
                {
                    var argument = new MethodCallArgumentApiModel {
                        Value    = parameterValues[count] ?? string.Empty,
                        DataType = item.Type.DataType
                    };
                    argumentsList.Add(argument);
                    count++;
                }
                model.Arguments = argumentsList;

                MethodCallResponse = await _twinService.NodeMethodCallAsync(endpointId, model);

                if (MethodCallResponse.ErrorInfo == null)
                {
                    return(null);
                }
                else
                {
                    if (MethodCallResponse.ErrorInfo.Diagnostics != null)
                    {
                        return(MethodCallResponse.ErrorInfo.Diagnostics.ToString());
                    }
                    else
                    {
                        return(MethodCallResponse.ErrorInfo.ToString());
                    }
                }
            }
            catch (Exception e) {
                _logger.Error($"Can not get method parameter from node '{nodeId}'");
                var errorMessage = string.Concat(e.Message, e.InnerException?.Message ?? "--", e?.StackTrace ?? "--");
                _logger.Error(errorMessage);
                string error = JToken.Parse(e.Message).ToString(Formatting.Indented);
                if (error.Contains(StatusCodes.Status401Unauthorized.ToString()))
                {
                    errorMessage = "Unauthorized access: Bad User Access Denied.";
                }
                else
                {
                    errorMessage = error;
                }
                return(errorMessage);
            }
        }
 /// <summary>
 /// Convert back to service model
 /// </summary>
 /// <returns></returns>
 public static MethodCallArgumentModel ToServiceModel(
     this MethodCallArgumentApiModel model)
 {
     if (model == null)
     {
         return(null);
     }
     return(new MethodCallArgumentModel {
         Value = model.Value,
         DataType = model.DataType
     });
 }
Example #3
0
        /// <summary>
        /// MethodCallAsync
        /// </summary>
        /// <param name="parameterValues"></param>
        /// <param name="nodeId"></param>
        /// <returns>Status</returns>
        public async Task <string> MethodCallAsync(MethodMetadataResponseApiModel parameters, string[] parameterValues,
                                                   string endpointId, string nodeId)
        {
            var argumentsList = new List <MethodCallArgumentApiModel>();
            var model         = new MethodCallRequestApiModel()
            {
                MethodId = nodeId,
                ObjectId = parameters.ObjectId
            };

            try {
                var count = 0;
                foreach (var item in parameters.InputArguments)
                {
                    var argument = new MethodCallArgumentApiModel {
                        Value    = parameterValues[count] ?? string.Empty,
                        DataType = item.Type.DataType
                    };
                    argumentsList.Add(argument);
                    count++;
                }
                model.Arguments = argumentsList;

                MethodCallResponse = await _twinService.NodeMethodCallAsync(endpointId, model);

                if (MethodCallResponse.ErrorInfo == null)
                {
                    return(null);
                }
                else
                {
                    if (MethodCallResponse.ErrorInfo.Diagnostics != null)
                    {
                        return(MethodCallResponse.ErrorInfo.Diagnostics.ToString());
                    }
                    else
                    {
                        return(MethodCallResponse.ErrorInfo.ToString());
                    }
                }
            }
            catch (Exception e) {
                Trace.TraceError("Can not get method parameter from node '{0}'", nodeId);
                var errorMessage = string.Concat(e.Message, e.InnerException?.Message ?? "--", e?.StackTrace ?? "--");
                Trace.TraceError(errorMessage);
                return(errorMessage);
            }
        }
        public async Task <ActionResult> MethodCall(string jstreeNode, string parameterData, string parameterValues, Session session = null)
        {
            string[] delimiter       = { "__$__" };
            string[] jstreeNodeSplit = jstreeNode.Split(delimiter, 3, StringSplitOptions.None);
            string   node;
            string   parentNode = null;
            string   endpointId = Session["EndpointId"].ToString();

            if (jstreeNodeSplit.Length == 1)
            {
                node       = jstreeNodeSplit[0];
                parentNode = null;
            }
            else
            {
                node       = jstreeNodeSplit[1];
                parentNode = (jstreeNodeSplit[0].Replace(delimiter[0], "")).Replace("__", "");
            }

            string actionResult = "";
            List <MethodCallParameterData> originalData = JsonConvert.DeserializeObject <List <MethodCallParameterData> >(parameterData);
            List <Variant> values = JsonConvert.DeserializeObject <List <Variant> >(parameterValues);
            List <MethodCallArgumentApiModel> argumentsList = new List <MethodCallArgumentApiModel>();

            try
            {
                MethodCallRequestApiModel model = new MethodCallRequestApiModel();
                model.MethodId = node;
                model.ObjectId = originalData[0].ObjectId;

                if (originalData.Count > 1)
                {
                    int count = 0;
                    foreach (var item in originalData)
                    {
                        MethodCallArgumentApiModel argument = new MethodCallArgumentApiModel();
                        argument.Value    = values[count].Value != null ? values[count].Value.ToString() : string.Empty;
                        argument.DataType = item.Datatype;
                        argumentsList.Add(argument);
                        count++;
                    }
                    model.Arguments = argumentsList;
                }

                var data = await TwinService.NodeMethodCallAsync(endpointId, model);

                if (data.ErrorInfo != null)
                {
                    actionResult = Strings.BrowserOpcMethodCallFailed + @"<br/><br/>" +
                                   Strings.BrowserOpcMethodStatusCode + ": " + data.ErrorInfo.StatusCode;
                    if (data.ErrorInfo.Diagnostics != null)
                    {
                        actionResult += @"<br/><br/>" + Strings.BrowserOpcDataDiagnosticInfoLabel + ": " + data.ErrorInfo.Diagnostics;
                    }
                }
                else
                {
                    if (data.Results.Count == 0)
                    {
                        actionResult = Strings.BrowserOpcMethodCallSucceeded;
                    }
                    else
                    {
                        actionResult = Strings.BrowserOpcMethodCallSucceededWithResults + @"<br/><br/>";
                        for (int ii = 0; ii < data.Results.Count; ii++)
                        {
                            actionResult += data.Results[ii].Value + @"<br/>";
                        }
                    }
                }
                return(Content(actionResult));
            }
            catch (Exception exception)
            {
                return(Content(CreateOpcExceptionActionString(exception)));
            }
        }