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(); } }
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); } }