Ejemplo n.º 1
0
        private void parseData(DeviceTcpState stateOne)
        {
            int iHeadIndex = 0;

            //parseBytes(stateOne.ipEndPoint, stateOne.abOneData);
            devHandler.parseBytes(stateOne.ipEndPoint, stateOne.abOneData);
            stateOne.clearData();

            stateOne.iDataStartIndex += stateOne.iOneDataLength - stateOne.iOneDataIndex;
            stateOne.iOneDataLength   = 0;
            stateOne.iOneDataIndex    = 0;
            iHeadIndex = DeviceSignal.haveHead(stateOne.Buffer, stateOne.iDataStartIndex);
            if (iHeadIndex != -1)
            {
                if (iHeadIndex + DeviceSignal.iHeadLength > stateOne.Buffer.Length)
                {
                    stateOne.abBakHeadData = new byte[DeviceSignal.iHeadLength];
                    Array.Copy(stateOne.Buffer, iHeadIndex, stateOne.abBakHeadData,
                               0, stateOne.Buffer.Length - iHeadIndex);
                    stateOne.iBakHeadIndex = stateOne.Buffer.Length - iHeadIndex;
                    stateOne.clearBuffer();
                }
                else
                {
                    stateOne.iDataStartIndex = iHeadIndex;
                    receiveParse(stateOne);
                }
            }
            else
            {
                stateOne.clearBuffer();
            }
        }
Ejemplo n.º 2
0
        private void receiveParse(DeviceTcpState stateOne)
        {
            Device device = devHandler.getDevByIP(stateOne.ipEndPoint);

            try
            {
                //Log.Write(" rev:" + BitConverter.ToString(stateOne.Buffer));
                if (DeviceSignal.isHeadData(stateOne.Buffer, stateOne.iDataStartIndex))
                {
                    if (stateOne.iDataStartIndex + DeviceSignal.iHeadLength <= stateOne.Buffer.Length)
                    {
                        stateOne.iOneDataLength = DeviceSignal.getDataLength(stateOne.Buffer, stateOne.iDataStartIndex);
                        stateOne.abOneData      = new byte[stateOne.iOneDataLength];

                        if (stateOne.Buffer.Length - stateOne.iDataStartIndex >= stateOne.iOneDataLength)
                        {
                            Array.Copy(stateOne.Buffer, stateOne.iDataStartIndex, stateOne.abOneData, 0, stateOne.iOneDataLength);
                            parseData(stateOne);
                        }
                        else
                        {
                            //stateOne.abAllData = new byte[stateOne.iDataLength];
                            //stateOne.Buffer.CopyTo(stateOne.abOneData, stateOne.iDataStartIndex);
                            Array.Copy(stateOne.Buffer, stateOne.iDataStartIndex, stateOne.abOneData,
                                       stateOne.iOneDataIndex, stateOne.Buffer.Length - stateOne.iDataStartIndex);
                            stateOne.iOneDataIndex += stateOne.Buffer.Length - stateOne.iDataStartIndex;
                            stateOne.clearBuffer();
                        }
                    }
                    else
                    {
                        stateOne.abBakHeadData = new byte[DeviceSignal.iHeadLength];
                        //stateOne.Buffer.CopyTo(stateOne.abBakHeadData, stateOne.iDataStartIndex);
                        Array.Copy(stateOne.Buffer, stateOne.iDataStartIndex, stateOne.abBakHeadData,
                                   0, stateOne.Buffer.Length - stateOne.iDataStartIndex);
                        stateOne.iBakHeadIndex = stateOne.Buffer.Length - stateOne.iDataStartIndex;
                        //stateOne.iOneDataIndex += stateOne.Buffer.Length - stateOne.iDataStartIndex;
                        stateOne.clearBuffer();
                    }
                }
                else
                {
                    if ((stateOne.iOneDataLength > 0) && (stateOne.iOneDataIndex > 0))
                    {
                        //stateOne.Buffer.CopyTo(stateOne.abOneData, stateOne.iOneDataIndex);

                        if (stateOne.Buffer.Length + stateOne.iOneDataIndex >= stateOne.iOneDataLength)
                        {
                            Array.Copy(stateOne.Buffer, stateOne.iDataStartIndex, stateOne.abOneData,
                                       stateOne.iOneDataIndex, stateOne.iOneDataLength - stateOne.iOneDataIndex);
                            parseData(stateOne);
                        }
                        else
                        {
                            Array.Copy(stateOne.Buffer, stateOne.iDataStartIndex, stateOne.abOneData,
                                       stateOne.iOneDataIndex, stateOne.Buffer.Length - stateOne.iDataStartIndex);
                            stateOne.iOneDataIndex += stateOne.Buffer.Length;
                            stateOne.clearBuffer();
                        }
                    }
                    else if (null != stateOne.abBakHeadData)
                    {
                        Array.Copy(stateOne.Buffer, stateOne.iDataStartIndex, stateOne.abBakHeadData, stateOne.iBakHeadIndex, DeviceSignal.iHeadLength - stateOne.iBakHeadIndex);
                        if (DeviceSignal.isHeadData(stateOne.abBakHeadData, 0))
                        {
                            stateOne.iOneDataLength = DeviceSignal.getDataLength(stateOne.abBakHeadData, 0);
                            stateOne.abOneData      = new byte[stateOne.iOneDataLength];
                            stateOne.abBakHeadData.CopyTo(stateOne.abOneData, 0);

                            if (stateOne.Buffer.Length + stateOne.iBakHeadIndex >= stateOne.iOneDataLength)
                            {
                                Array.Copy(stateOne.Buffer, stateOne.iDataStartIndex, stateOne.abOneData, stateOne.iBakHeadIndex,
                                           stateOne.iOneDataLength - stateOne.iBakHeadIndex);
                                parseData(stateOne);
                            }
                            else
                            {
                                Array.Clear(stateOne.abBakHeadData, 0, stateOne.abBakHeadData.Length);
                                stateOne.abBakHeadData = null;
                                Array.Copy(stateOne.Buffer, stateOne.iDataStartIndex, stateOne.abOneData, stateOne.iBakHeadIndex, stateOne.Buffer.Length);
                                stateOne.iOneDataIndex = stateOne.Buffer.Length + stateOne.iBakHeadIndex;
                                stateOne.clearBuffer();
                            }
                        }
                    }
                }
            }
            catch (Exception Ex)
            {
                stateOne.clearBuffer();
                LogHelper.Log.Info("[ERROR] " + Ex.Message + Ex.StackTrace);
            }
        }
        public void parseBytes(IPEndPoint ipEndPoint, byte[] bytes)
        {
            int    i      = 0;
            string strRes = "";

            LogHelper.Log.Info("收到设备数据----------");
            //string ipAdr = ipEndPoint.Address.ToString();

            //if(null == ES_GetDevbyIP(ipEndPoint))
            //{
            //    dev.ipDevEP = ipEndPoint;
            //    ESDevList.Add(dev);
            //    LogHelper.WriteLog("devlist count " + ESDevList.Count);
            //}
            DEVICE_MSG_TYPE eType  = (DEVICE_MSG_TYPE)DeviceSignal.GetType(bytes);
            Device          device = getDevByIP(ipEndPoint);

            if (null == device)
            {
                if (DEVICE_MSG_TYPE.INST_MSG_TYPE_HEARTBEAT != eType)
                {
                    LogHelper.Log.Info("没有匹配的设备----------" + ipEndPoint);
                    return;
                }
            }
            else
            {
                //curDevIp = ipEndPoint;
                device.DeviceEndPoint.Port = ipEndPoint.Port;
                if (device.DeviceState == (int)Device.DEVICE_STATE_ENUM.STATE_DISCONNECT)
                {
                    device.DeviceState = (int)Device.DEVICE_STATE_ENUM.STATE_STOP;
                }
            }

            //INST_MSG_TYPE_ENUM eType = (INST_MSG_TYPE_ENUM)ES_DevSignal.GetType(bytes);
            int iLength = DeviceSignal.GetLength(bytes);

            LogHelper.Log.Info("type " + (int)eType);
            //if (INST_MSG_TYPE_ENUM.INST_MSG_TYPE_DATA != eType)
            //{
            //    strRes = ES_DevSignal.parseSignal(bytes);
            //}
            //LogHelper.WriteLog("收到模拟数据----------"+ eType);

            switch (eType)
            {
            case DEVICE_MSG_TYPE.INST_MSG_TYPE_HEARTBEAT:
                string strDevID = DeviceSignal.GetDevID(bytes).Trim();
                Device idDevice = getDevByID(strDevID);
                if (null == idDevice)
                {
                    break;
                }
                ///更新当前设备到数据库
                //socketServer.config.UpdateCurDevIP(ipEndPoint, strDevID);

                if (null == device)
                {
                    device = idDevice;
                }
                if (!device.DeviceEndPoint.Equals(ipEndPoint))
                {
                    device.DeviceEndPoint = ipEndPoint;
                    //device.UpdateDBEP();更新数据库设备IP
                }
                if (device.DeviceState == (int)Device.DEVICE_STATE_ENUM.STATE_DISCONNECT)
                {
                    device.DeviceState = (int)Device.DEVICE_STATE_ENUM.STATE_STOP;
                }
                //device.Feed();
                strRes = DeviceSignal.parseSignal(bytes);
                sendStatusClient(device, strRes);
                break;

            case DEVICE_MSG_TYPE.INST_MSG_TYPE_DATA:

                LogHelper.Log.Info((int)DEVICE_MSG_TYPE.INST_MSG_TYPE_DATA + "下载文件---------------start");
                long lTimeStramp = 0;
                if (bytes.Length >= iSigDataOffset)
                {
                    lTimeStramp = BitConverter.ToInt64(bytes, iSigTimestOffset);
                }
                else
                {
                    break;
                }
                if (device.DeviceState == (int)Device.DEVICE_STATE_ENUM.STATE_STOP)
                {
                    device.DeviceState = (int)Device.DEVICE_STATE_ENUM.STATE_RUNNING;
                }

                byte[] cChlCounts = BitConverter.GetBytes(BitConverter.ToChar(bytes, iSigChlCountOffset));
                if (3 != cChlCounts[0])
                {
                    return;
                }
                int iDataNum = BitConverter.ToInt32(bytes, iSigDataLengthOffset);
                lock (device.objLocAcp)
                {
                    //FrontThreshold ft = new FrontThreshold();
                    //ft.fThreshold_1 = dDefThreshold;
                    //ft.fThreshold_2 = dDefMean;
                    //ft.fThreshold_3 = dDefCount;
                    float[] afCharVal = new float[30];

                    afCharVal[0] = BitConverter.ToSingle(bytes, iSigEigenValOffset);
                    afCharVal[1] = BitConverter.ToSingle(bytes, iSigEigenValOffset + 4);

                    afCharVal[4] = BitConverter.ToSingle(bytes, iSigEigenValOffset + 40);
                    afCharVal[5] = BitConverter.ToSingle(bytes, iSigEigenValOffset + 44);

                    afCharVal[8] = BitConverter.ToSingle(bytes, iSigEigenValOffset + 80);
                    afCharVal[9] = BitConverter.ToSingle(bytes, iSigEigenValOffset + 84);

                    //bool bIsTrigger = checkCharVal(afCharVal, ft);

                    //OneSignal TimeSig = new OneSignal();
                    //TimeSig.s = 1;
                    //TimeSig.t = lTimeStramp;   //采集起始毫秒时间戳
                    ////TimeSig.y = BitConverter.ToInt32(bytes, 16);   //采集起始毫秒时间戳高32位
                    //if (device.bIsNeedRefreshStartTime)
                    //{
                    //    device.lClctStartTime = TimeSig.t;
                    //    device.bIsNeedRefreshStartTime = false;
                    //}
                    ////Log.Write("     " + TimeSig.t + "    " + TimeStamp.ConvertStringToDateTime(TimeSig.t + ""));
                    //device.SigQ.Enqueue(TimeSig);
                    ////Log.Write("parseBytes " + "TimeSig" + "[" + device.SigQ.Count + "]");

                    //for (i = 0; i < 30; i++)
                    //{
                    //    OneSignal Sig = new OneSignal();
                    //    if (bIsTrigger)
                    //    {
                    //        Sig.s = 2;
                    //    }
                    //    else
                    //    {
                    //        Sig.s = 3;
                    //    }
                    //    Sig.x = BitConverter.ToSingle(bytes, iSigEigenValOffset + 4 * i);

                    //    device.SigQ.Enqueue(Sig);
                    //    //Log.Write("parseBytes " + "Cha[" + i + "]" + "[" + device.SigQ.Count + "]");
                    //}

                    //if ((ES_Device.DEVICE_CLCT_TYPE_ENUM.CLCT_TYPE_TIMECONT == device.eClctType) &&
                    //    (false == bIsTrigger))
                    //{
                    //    break;
                    //}

                    //for (i = 0; i < iDataNum; i++)
                    //{
                    //    OneSignal Sig = new OneSignal();
                    //    Sig.x = BitConverter.ToSingle(bytes, iSigDataOffset + 4 * i);
                    //    Sig.y = BitConverter.ToSingle(bytes, iSigDataOffset + 4 * (i + iDataNum));
                    //    Sig.z = BitConverter.ToSingle(bytes, iSigDataOffset + 4 * (i + 2 * iDataNum));

                    //    device.SigQ.Enqueue(Sig);
                    //    //Log.Write("parseBytes " + "Val[" + i + "]" + "[" + device.SigQ.Count + "]");
                    //}

                    //OneSignal EndSig = new OneSignal();
                    //EndSig.s = 10;
                    //device.SigQ.Enqueue(EndSig);
                }

                LogHelper.Log.Info("load enqueue over----------------");
                break;

            default:
                break;
            }
            //revRes = ES_DevSignal.SignalParse(bytes);

            //ES_Device device = ES_GetDevbyIP(ipEndPoint.Address.ToString());
            if (null != device)
            {
                //string path_save_original = pro_path + device.DevID + "\\original";
                //if (!Directory.Exists(path_save_original))
                //{
                //    Directory.CreateDirectory(path_save_original);
                //}
                //DataFile.SaveTxt(revRes, path_save_original);
            }
        }