//using System;
//using System.Collections.Generic;
////using System.Threading;

//using Highway.Assemble.Sql;
////using Mesnac.AsyncSocketServer;
//using Highway.SocketServer;
//using Mesnac.Log;

//namespace Highway.Assemble.Business
//{
//    public class EquipProtocol : BaseSocketProtocol
//    {
//        public ISql db = null;
//        public EquipProtocol(AsyncSocketServer asyncSocketServer, AsyncSocketUserToken asyncSocketUserToken)
//            : base(asyncSocketServer, asyncSocketUserToken)
//        {
//            db = new DbHandler();
//            m_socketFlag = "";
//        }
//        //接收消息
//        public override bool ProcessReceive(byte[] buffer, int offset, int count)
//        {
//            byte[] buf = new byte[count];
//            Array.Copy(buffer, 0, buf, 0, count);
//            string mee = MsgUtil.bytesToHexStr(buf, buf.Length);
//            List<MessagePack> listMP = PackCheck(buf);
//            LogService.Instance.Debug("获取适配器报文：" + MsgUtil.bytesToHexStr(buf, buf.Length));

//            foreach (var mp in listMP)
//            {
//                if (mp == null) { continue; }//验证失败
//                AnalaysisData(mp);
//            }
//            return true;
//        }

//        private void AnalaysisData(MessagePack SourceMessage)
//        {
//            byte[] hbt = new byte[7];
//            MessageString ms = new MessageString();
//            MessagePack mp;
//            ushort addr = SourceMessage.iStationId;

//            switch ((RecEquipMsgType)SourceMessage.iMessageType)
//            {
//                case RecEquipMsgType._GetEquipInfo://返回适配软件所需控制的设备信息
//                    mp = ms.SeneEquipList(addr.ToString());
//                    byte[] msgBuf = ms.messageCombine(mp);
//                    TcpService.AsyncSocketSvr.SendMessageByFlag(addr, msgBuf);
//                    LogService.Instance.Debug("返回适配软件所需控制的设备信息： " + MsgUtil.bytesToHexStr(msgBuf, msgBuf.Length));

//                    break;
//                case RecEquipMsgType._GetSensor://发送传感器数据给适配
//                    mp = ms.SeneSensorList(addr.ToString());
//                    byte[] msgBuf2 = ms.messageCombine(mp);
//                    TcpService.AsyncSocketSvr.SendMessageByFlag(addr, msgBuf2);
//                    LogService.Instance.Debug("发送传感器数据给适配： " + MsgUtil.bytesToHexStr(msgBuf2, msgBuf2.Length));

//                    break;
//                case RecEquipMsgType._EPCinfo:
//                case RecEquipMsgType._SendData: //收到传感器数据 发送给Mes
//                    mp = ms.ReadWrite(SourceMessage);
//                    byte[] msgBuf3 = ms.messageCombine(mp);
//                    var tock1 = TcpService.AsyncSocketSvr.SendMessageByFlag(Convert.ToInt32(Unity.Instance.mesEquip.adapterID), msgBuf3);
//                    //发送数据到界面
//                    //前四位是编号
//                    UInt32 combineid = BitConverter.ToUInt32(SourceMessage.pMessage, 0);
//                    byte[] data = new byte[SourceMessage.pMessage.Length - 4];
//                    Array.Copy(SourceMessage.pMessage, 4, data, 0, SourceMessage.pMessage.Length - 4);

//                    TcpService.DelAutoReportDataAction(Convert.ToInt32(SourceMessage.iLen), combineid, data);

//                    if (data.Length == 0)
//                    {
//                        db.InsertReadData(combineid.ToString(), "NoData", 2);
//                    }
//                    else
//                    {
//                        db.InsertReadData(combineid.ToString(), MsgUtil.bytesToHexStr(data, data.Length), 2);
//                    }
//                    LogService.Instance.Debug(tock1 == null ? "MES未连接： " : "发送报数据给MES： " + MsgUtil.bytesToHexStr(msgBuf3, msgBuf3.Length));
//                    //  TcpService.AdapterStateAction?.Invoke(Unity.Instance.mesEquip.adapterID, 0);//发送MES连接状态

//                    break;
//                case RecEquipMsgType._RecGetData:
//                    mp = ms.ReadWrite(SourceMessage);
//                    byte[] msgBuf4 = ms.messageCombine(mp);
//                    var tock = TcpService.AsyncSocketSvr.SendMessageByFlag(Convert.ToInt32(Unity.Instance.mesEquip.adapterID), msgBuf4);

//                    LogService.Instance.Debug(tock == null ? "MES未连接： " : "发送报数据给MES： " + MsgUtil.bytesToHexStr(msgBuf4, msgBuf4.Length));

//                    break;
//                case RecEquipMsgType._RecAutoData: //自报数据上传 处理 需判断是否发送MES
//                    try
//                    {
//                        AtuoDealData(SourceMessage);
//                    }
//                    catch (Exception e)
//                    {
//                        LogService.Instance.Debug("接收自报数据异常：" + e.ToString());
//                    }

//                    break;
//                case RecEquipMsgType._HeartBeat:

//                    break;
//                case RecEquipMsgType._EquipState://将设备状态保存数据库，并提供给界面展示
//                    int diviceid = (ushort)BitConverter.ToUInt16(SourceMessage.pMessage, 0);
//                    var state = SourceMessage.pMessage[2];
//                    //回调设备状态
//                    TcpService.EquipStateAction?.Invoke(diviceid.ToString(), state);
//                    //保存数据库

//                    //插入设备状态
//                    db.InsertEquipState(diviceid.ToString(), state);
//                    break;
//                default:
//                    break;
//            }
//        }
//        /// <summary>
//        /// 自报数据处理业务逻辑
//        /// </summary>
//        /// <param name="SourceMessage"></param>
//        private void AtuoDealData(MessagePack SourceMessage)
//        {
//            bool HaveData = false;
//            if (SourceMessage.iLen > 0)
//            {
//                HaveData = true;
//            }
//            int p = 0;
//            while (HaveData)
//            {
//                if (p + 6 > SourceMessage.iLen)
//                {
//                    break;
//                }
//                UInt32 combineid2 = BitConverter.ToUInt32(SourceMessage.pMessage, p);
//                p += 4;
//                int len = SourceMessage.pMessage[p];
//                p = p + 1;

//                byte[] data = new byte[len];
//                Array.Copy(SourceMessage.pMessage, p, data, 0, len);
//                p += len;
//                TcpService.DelAutoReportDataAction(len, combineid2, data);
//                //判断一下设备
//                var adapter = Unity.Instance.adapterList.Find((X) => { return X.adapterID == SourceMessage.iStationId.ToString(); });
//                var Sensor = adapter.SensorList.Find((X) => { return X.combineid == combineid2.ToString(); });
//                if (Sensor == null)
//                {
//                    return;
//                }
//                MessageString mm = new MessageString();
//                if (Sensor.CallAdapter == 1)
//                {
//                    //这里默认是IO类型数据
//                    int IO = data[0];
//                    if (IO > 0)
//                    {
//                        MessagePack mp1 = new MessagePack();
//                        mp1 = mm.ReadData(Sensor.CallAdapterid, Sensor.CallCombineID);
//                        byte[] msgBu5 = mm.messageCombine(mp1);
//                        var tock = TcpService.AsyncSocketSvr.SendMessageByFlag(Convert.ToInt32(Sensor.CallAdapterid), msgBu5);
//                        LogService.Instance.Debug("发送数据给适配适配" + MsgUtil.bytesToHexStr(msgBu5, msgBu5.Length));

//                    }
//                }
//                else
//                {
//                    MessagePack mp = new MessagePack();
//                    mp = mm.ReadWrite(SourceMessage);
//                    byte[] msgBuf4 = mm.messageCombine(mp);
//                    var tock = TcpService.AsyncSocketSvr.SendMessageByFlag(Convert.ToInt32(Unity.Instance.mesEquip.adapterID), msgBuf4);
//                    LogService.Instance.Debug(tock == null ? "MES未连接： " : "发送数据给MES" + MsgUtil.bytesToHexStr(msgBuf4, msgBuf4.Length));
//                }
//                ///保存数据库
//                ///data[] combineid2 tyepe 1
//                // var currentTime = System.DateTime.Now;
//                /* TcpService.*/
//                DateTime currentTime = DateTime.Now;
//                if (data.Length == 0) //读取不到数据 插入NoData
//                {
//                    db.InsertReadData(combineid2.ToString(), "NoData", 1);
//                }
//                else
//                {
//                    db.InsertReadData(combineid2.ToString(), MsgUtil.bytesToHexStr(data, data.Length), 1);

//                }
//            }
//        }



//        private MessagePack formatCheck(byte[] buffer)
//        {
//            int iLen = buffer.Length;

//            MessagePack mp = new MessagePack();
//            if (iLen < 10)//小于最小长度，报文无效
//            {
//                return null;
//            }

//            ushort Head = buffer[0]; //传感器ID
//            if (Head != 0x56)
//            {
//                return null;
//            }
//            mp.iStationId = (ushort)BitConverter.ToUInt16(buffer, 1);
//            mp.iMessageType = buffer[4];
//            mp.iLen = (ushort)BitConverter.ToUInt16(buffer, 5);
//            mp.pMessage = new byte[mp.iLen];
//            Array.Copy(buffer, 7, mp.pMessage, 0, mp.iLen);
//            return mp;
//        }

//        private List<MessagePack> PackCheck(byte[] buffer)
//        {
//            List<MessagePack> listmp = new List<MessagePack>();
//            int bufferlengh = buffer.Length;
//            int pos = 0;
//            while (pos < bufferlengh)
//            {
//                if (10 + pos > bufferlengh)
//                {
//                    break;
//                }
//                MessagePack mp = null;
//                int iLen = (ushort)BitConverter.ToUInt16(buffer, pos + 5);
//                int frameLengh = iLen + 10;
//                byte[] bufferA = new byte[frameLengh];
//                if (frameLengh + pos > bufferlengh)
//                {
//                    break;
//                }
//                Array.Copy(buffer, pos, bufferA, 0, frameLengh);
//                mp = formatCheck(bufferA);
//                if (mp != null)
//                {
//                    listmp.Add(mp);
//                }
//                pos += frameLengh;
//            }
//            return listmp;
//        }

//        List<byte[]> bufferlit = null;
//        void GetBuffer(byte[] buffer)
//        {
//            if (buffer.Length < 10)
//            {
//                return;
//            }
//            //取数据长度
//            byte[] head = new byte[2];
//            Array.Copy(buffer, 5, head, 0, 2);
//            //获得第一个数据长度 len
//            int len = BitConverter.ToInt16(head, 0);
//            if (buffer.Length < 10 + len)
//            {
//                return;
//            }
//            byte[] buf = new byte[10 + len];
//            Array.Copy(buffer, 0, buf, 0, 10 + len);
//            bufferlit.Add(buf);
//            if (buffer.Length - 10 - len - 10 >= 0)
//            {
//                byte[] leabyte = new byte[buffer.Length - 10 - len];
//                Array.Copy(buffer, (len + 10), leabyte, 0, (buffer.Length - 10 - len));
//                GetBuffer(leabyte);
//            }

//        }
//    }

//}