| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141 |
- using SKMC.Api.Common.Logger;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace SKMC.Api.Vision.SKV0
- {
- /// <summary>
- /// 视觉通讯协议基础客户端
- /// </summary>
- public class SKVisionClient
- {
- private readonly static ILogger log = LogFactory.Get();
- private readonly SKVisionClientBase clientBase;
- public SKVisionClient(int port, int timeout)
- {
- clientBase = new SKVisionClientBase(port, timeout);
- }
- /// <summary>
- /// 发送请求不接收结果
- /// </summary>
- /// <param name="moduleCode">模块码</param>
- /// <param name="functionCode">功能码</param>
- /// <param name="productCode">产品码</param>
- /// <param name="parameters">请求参数</param>
- public Task Request(string moduleCode, string functionCode, string productCode, bool isOnlySend,
- List<string> parameters = null)
- {
- string timeStamp = DateTime.Now.ToString("yyMMddHHmmssfff");
- SKVisionProtocol skVisionRequest = new SKVisionProtocol
- {
- Direction = "T",
- ModuleCode = moduleCode,
- FuncCode = functionCode,
- ProductCode = productCode,
- Timestamp = timeStamp,
- BodyDomains = parameters
- };
- clientBase.Request(skVisionRequest.ToRequest(), isOnlySend);
- return default;
- }
- /// <summary>
- /// 发送请求并接收结果 (同步模式)
- /// </summary>
- /// <param name="moduleCode">模块码</param>
- /// <param name="functionCode">功能码</param>
- /// <param name="productCode">产品码</param>
- /// <param name="parameters">请求参数</param>
- /// <param name="resultAction">解析函数</param>
- public Task Request(string moduleCode, string functionCode, string productCode,
- List<string> parameters = null, Action<SKVisionProtocol> resultAction = null)
- {
- string timeStamp = DateTime.Now.ToString("yyMMddHHmmssfff");
- SKVisionProtocol skVisionRequest = new SKVisionProtocol
- {
- Direction = "T",
- ModuleCode = moduleCode,
- FuncCode = functionCode,
- ProductCode = productCode,
- Timestamp = timeStamp,
- BodyDomains = parameters
- };
- clientBase.Request(skVisionRequest.ToRequest(),
- responseAction: (response) =>
- {
- resultAction?.Invoke(skVisionRequest.FromResponse(response));
- });
- return default;
- }
- /// <summary>
- /// 发送请求并接收结果 (异步模式)
- /// </summary>
- /// <param name="moduleCode"></param>
- /// <param name="functionCode"></param>
- /// <param name="productCode"></param>
- /// <param name="parameters"></param>
- /// <param name="responseAction"></param>
- /// <param name="resultAction"></param>
- /// <returns></returns>
- public Task Request(string moduleCode, string functionCode, string productCode,
- List<string> parameters = null, Action<SKVisionProtocol> responseAction = null, Action<SKVisionProtocol> resultAction = null)
- {
- string timeStamp = DateTime.Now.ToString("yyMMddHHmmssfff");
- // 是否粘包
- bool isMultiPacks = false;
- SKVisionProtocol skVisionRequest = new SKVisionProtocol
- {
- Direction = "T",
- ModuleCode = moduleCode,
- FuncCode = functionCode,
- ProductCode = productCode,
- Timestamp = timeStamp,
- BodyDomains = parameters
- };
- clientBase.Request(skVisionRequest.ToRequest(),
- responseAction: (response) =>
- {
- SKVisionProtocol skVisionProtocol = skVisionRequest.FromResponse(response);
- responseAction?.Invoke(skVisionRequest.FromResponse(response));
- // 有粘包
- if (skVisionProtocol.SKVisionSubProtocol != null)
- {
- log.Debug("粘包处理...");
- resultAction?.Invoke(skVisionProtocol.SKVisionSubProtocol);
- isMultiPacks = true;
- }
- });
- if (!isMultiPacks)
- {
- return Task.Run(() =>
- {
- string result = null;
- try
- {
- result = clientBase.GetResult();
- }
- catch (Exception e)
- {
- log.Error($"获取视觉结果异常: {e.Message}", e);
- }
- try
- {
- resultAction?.Invoke(skVisionRequest.FromResponse(result));
- }
- catch (Exception e)
- {
- log.Error($"处理视觉结果异常: {e.Message}", e);
- }
- });
- }
- return default;
- }
- }
- }
|