using FJ500Comm;
using Microsoft.Extensions.Logging;
using SlnMesnac.Common;
using SlnMesnac.Config;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using TouchSocket.Core;
using TouchSocket.Sockets;

#region << 版 本 注 释 >>
/*--------------------------------------------------------------------
* 版权所有 (c) 2024 WenJY 保留所有权利。
* CLR版本：4.0.30319.42000
* 机器名称：LAPTOP-E0N2L34V
* 命名空间：SlnMesnac.TouchSocket
* 唯一标识：496f8d2b-70e3-4a05-ae18-a9b0fcd06b82
*
* 创建者：WenJY
* 电子邮箱：wenjy@mesnac.com
* 创建时间：2024-03-27 21:58:35
* 版本：V1.0.0
* 描述：
*
*--------------------------------------------------------------------
* 修改人：
* 时间：
* 修改说明：
*
* 版本：V1.0.0
*--------------------------------------------------------------------*/
#endregion << 版 本 注 释 >>
namespace SlnMesnac.TouchSocket
{
    public class UdpServer
    {
       
        private readonly UdpSession udpService = new UdpSession();
        private ILogger<UdpServer> _logger;


        /// <summary>
        /// 接收喷码机反馈
        /// </summary>
        public  delegate void ReceivedPMCode(string str);
        public static event ReceivedPMCode? ReceivedPMCodeEvent;

      

        private FJ500SP fj500s =   new FJ500SP();


        public UdpServer(ILogger<UdpServer> logger)
        {
            _logger = logger;
            
        }


        public void Init(int serverPort)
        {
            try
            {
                udpService.Received = (c, e) =>
                {
                    string result =  e.ByteBlock.ToString().TrimEnd('\r', '\n');;
                   // _logger.LogInformation("收到喷码机回复=====》"+result);
                    if(result== "~03040000FE79")
                    {  
                        //清理用户区返回指令不做处理
                    }
                    else
                    {
                        ReceivedPMCodeEvent?.Invoke(result);
                    }
                   
                    return EasyTask.CompletedTask;
                };

                udpService.Setup(new TouchSocketConfig()
                    .SetBindIPHost(new IPHost(serverPort)));
                udpService.Start();

                _logger.LogInformation($"UdpServer启动成功，监听端口：{serverPort}");
              

            }
            catch (Exception ex)
            {
               
                _logger.LogError($"UdpServer启动异常：{ex.Message}");
            }

        }

        /// <summary>
        /// 发送条码数据
        /// </summary>
        /// <param name="message"></param>
        public void SendMessage(string message)
        {
            string[] data = new string[] { $"{message}" };
            
            string str0 = fj500s.ClearUser(); 
            string str = fj500s.SendData(data, 2);

            //清理用户区
            udpService.Send(new IPHost("192.168.2.51:3000").EndPoint, str0);
            Thread.Sleep(20);
            udpService.Send(new IPHost("192.168.2.51:3000").EndPoint, str);
           
        }
  

    }
}
