public async Task OnExecute()
        {
            var adsClient = new TcAdsClient {
                Synchronize = false
            };
            var handle = GetConsoleWindow();

            ShowWindow(handle, SW_HIDE);

            CreateLogger();
            var logger = LoggerFactory.GetLogger();

            try
            {
                logger.Debug("Starting Json Read Writer");
                logger.Debug($"Connecting to Beckhoff Port: {AdsPort} - AdsNet: '{AdsNetId}'");
                adsClient.Connect(AdsNetId, AdsPort);

                logger.Debug($"Method: {Method}");

                logger.Debug($"File: {FilePath}");

                logger.Debug($"Field: {Field}");

                logger.Debug($"Executing...");

                if (Method == FileOperationMethod.Write)
                {
                    var content = File.ReadAllText(FilePath);
                    logger.Debug($"Writing json into {Field}...");
                    var objectResponse = JObject.Parse(content);
                    await adsClient.WriteJson(Field, objectResponse);
                }
                else if (Method == FileOperationMethod.Read)
                {
                    var json = await adsClient.ReadJson(Field);

                    File.WriteAllText(FilePath, json.ToString());
                }
                else
                {
                    logger.Warn("Invalid Method");
                }

                adsClient.Disconnect();
            }
            catch (Exception e)
            {
                logger.Error($"Error while calling Json Parser: {e}", e);
                logger.Error($"{e.StackTrace}");
            }
            finally
            {
                adsClient?.Dispose();
            }
        }
Example #2
0
        public async Task OnExecute()
        {
            var adsClient = new TcAdsClient {
                Synchronize = false
            };
            var handle = GetConsoleWindow();

            ShowWindow(handle, SW_HIDE);

            CreateLogger();
            var logger = LoggerFactory.GetLogger();
            var header = GetOrCreateHeader();

            try
            {
                logger.Debug("Starting API Call");
                logger.Debug($"Connecting to Beckhoff Port: {AdsPort} - AdsNet: '{AdsNetId}'");
                adsClient.Connect(AdsNetId, AdsPort);

                var callAddress = Address.IsValidUrl() ? Address : await adsClient.ReadAsync <string>(Address);

                logger.Debug($"Url: {callAddress}");
                logger.Debug($"Method: {Method}");

                var restClient = new RestClient();
                var request    = new RestRequest(callAddress, Method);

                foreach (var item in header)
                {
                    logger.Debug($"Adding header: \"{item.Key}\" : \"{item.Value}\"");
                    request.AddHeader(item.Key, item.Value);
                }

                var jsonBody = !string.IsNullOrEmpty(Body) ? await adsClient.ReadJson(Body) : new JObject();

                request.RequestFormat = DataFormat.Json;
                request.AddParameter("text/json", jsonBody.ToString(), ParameterType.RequestBody);
                logger.Debug($"Body: {jsonBody}");

                logger.Debug($"Executing...");
                var response = await restClient.ExecuteTaskAsync(request);

                logger.Debug($"Response code: {response.StatusCode}");
                logger.Debug($"Response content: {response.Content}");

                if (!string.IsNullOrEmpty(ResponseCode))
                {
                    logger.Debug($"Wrinting status code into {ResponseCode}...");
                    await adsClient.WriteAsync(ResponseCode, response.StatusCode);
                }

                //Try parsing object or array from response content
                logger.Debug($"Wrinting json response into {Response}...");
                try
                {
                    var objectResponse = JObject.Parse(response.Content);
                    await adsClient.WriteJson(Response, objectResponse);
                }
                catch (JsonReaderException exception)
                {
                    logger.Error("Unable to write response content parsing a json object", exception);

                    try
                    {
                        var arrayResponse = JArray.Parse(response.Content);
                        await adsClient.WriteJson(Response, arrayResponse);
                    }
                    catch (JsonReaderException innerException)
                    {
                        logger.Error("Unable to write response content parsing a json array", innerException);
                    }
                }

                adsClient.Disconnect();
            }
            catch (Exception e)
            {
                logger.Error($"Error while calling API: {e}");
                logger.Error($"{e.StackTrace}");
            }
            finally
            {
                adsClient?.Dispose();
            }
        }