public KaiYanDataParser(TransfersType t, string codefix,IGPSDataProcessor Storage) : base(t,Storage) { base.TransfersType = t; base.CodePrefix = codefix; _ProcessAppLayerCmd = new ProcessAppLayerCmd(this); _ProcessAppLayerCmd.SendAnswerToWebEvent += new ProcessAppLayerCmd.SendAnswerToWebHandler(base .OnSendAnswerToWebEvent); _ProcessAppLayerCmd.SendDataEvent += new ProcessAppLayerCmd.SendDataHandler(base.OnSendDataEvent); }
public QueryIncomingTransfersParameters(TransfersType transfersType) { switch (transfersType) { case TransfersType.All: TransfersTypeString = "all"; break; case TransfersType.Available: TransfersTypeString = "available"; break; case TransfersType.Unavailable: TransfersTypeString = "unavailable"; break; } }
/// <summary> /// 构造函数 /// </summary> protected AnalyseBase(TransfersType t,IGPSDataProcessor Storage) { _TransfersType = t; _StorageService = Storage; }
/// <summary> /// 解析GPS数据 /// </summary> /// <param name="transferType">传输数据的协议类型:如TCP、UDP</param> /// <param name="buf">接收到的byte数据</param> /// <param name="aResponseList">需返回的应答数据</param> /// <param name="gpsCode">解析后输出的GPSCode</param> /// <param name="sessionID">会话ID</param> /// <returns></returns> public List<GPSDataEntity> Parse(TransfersType transferType, byte[] buf, out List<byte[]> aResponseList, out string fullGpsCode, string sessionID) { string gpscode = GetGpsCodeByBytes(buf); fullGpsCode = base.CodePrefix + gpscode; aResponseList = new List<byte[]>(); if (buf[2] != 0x85) aResponseList.Add(BoShiJieInstructionSet.CenterReply(buf)); LongHanData gpsData = null; List<GPSDataEntity> ObjectList = new List<GPSDataEntity>(); bool blnIsPosData = false; var robberyImageSetting = BoShiJieVehicleSettings.Instance.SendRobberyImageSetting(fullGpsCode); if (robberyImageSetting != null) aResponseList.Add(robberyImageSetting); switch (buf[2]) { case 0xB1://握手 if (String.IsNullOrEmpty(gpscode)) break; if (transferType == TransfersType.IsTcp) { OnAddConnectionEvent(fullGpsCode, sessionID); } else { var reply = BoShiJieInstructionSet.CenterReply(buf); string[] strremortpoint = sessionID.Split(':'); IPEndPoint ippoint = new IPEndPoint(IPAddress.Parse(strremortpoint[0]), int.Parse(strremortpoint[1])); OnSendDataEvent((EndPoint)ippoint, reply); OnAddConnectionEvent(fullGpsCode, sessionID); } break; case 0x80://主发位置数据 gpsData = GPSDataDecoder(buf); //数据解析 //将连接加入连接集合,如果是连接后的第一点数据,则同时会更新路由关系表 //注意UpdateFirstDataRela的先后关系 if (!String.IsNullOrEmpty(gpsData.FullGpsCode)) { OnAddConnectionEvent(gpsData.FullGpsCode, sessionID); } //更新上一次数据 if (TCPConnList.Instance().IsFirstDataOfConn(sessionID)) { //更改记录状态,标明以后的数据已不是第一点数据 TCPConnList.Instance().UpdateFirstDataRela(sessionID, 0); } ObjectList.Add(gpsData.BaseData); blnIsPosData = true; break; case 0x8E://补传位置数据 try { gpsData = GPSDataDecoder(buf); //数据补传解析 ComputeMileAgeAndVerifyDataForFetch(ref gpsData, mMaxSpeedMeterPerSecond); ObjectList.Add(gpsData.BaseData); } catch { } break; case 0x85://终端应答 OnPostSendAnswerHandlerEvent(string.Empty, true, fullGpsCode, ControlCmdType.LongHanAnswered, true); //updated by lixun on 2010/12/10 博实结协议由3字节里程变为4字节后,80/81/85/8E数据格式都一样 //gpsData = ConvertBytesToEntity(buf); gpsData = GPSDataDecoder(buf); ObjectList.Add(gpsData.BaseData); Logger.Trace("[终端应答]--" + gpsData.FullGpsCode); break; case 0x8D://图片帧数据 ProcessPictureFrame(buf); break; default: break; } #region 备份 //switch (transferType) //{ // //若是TCP的数据,只做解析,不存数据库 // case TransfersType.IsTcp: // if (buf[2] == 0xB1) // { // if (!String.IsNullOrEmpty(gpscode)) // { // OnAddConnectionEvent(gpsCode, sessionID); // var robberyImageSetting = LongHanVehicleSettings.Instance.SendRobberyImageSetting(gpsCode); // if (robberyImageSetting != null) // aResponseList.Add(robberyImageSetting); // } // } // else if (buf[2] == 0x85) // { // OnPostSendAnswerHandlerEvent(string.Empty, true, gpsCode, ControlCmdType.LongHanAnswered, true); // gpsData = ConvertBytesToEntity(buf); // //ObjectList.Add(gpsData.BaseData); // } // else if (buf[2] == 0x80) // { // gpsData = GPSDataDecoder(buf); //数据解析 // //将连接加入连接集合,如果是连接后的第一点数据,则同时会更新路由关系表 // //注意UpdateFirstDataRela的先后关系 // if (!String.IsNullOrEmpty(gpsData.FullGpsCode)) // { // OnAddConnectionEvent(gpsData.FullGpsCode, sessionID); // gpsCode = gpsData.FullGpsCode; // var robberyImageSetting = LongHanVehicleSettings.Instance.SendRobberyImageSetting(gpsCode); // if (robberyImageSetting != null) // aResponseList.Add(robberyImageSetting); // } // //更新上一次数据 // if (TCPConnList.Instance().IsFirstDataOfConn(sessionID)) // { // //更新上一点数据 // CacheUtility.UpdateLastGPSData(gpsData.FullGpsCode); // //更改记录状态,标明以后的数据已不是第一点数据 // TCPConnList.Instance().UpdateFirstDataRela(sessionID, 0); // } // //获取上一个GPS数据点 // GPSDataEntity aLastData = GetLastGPSData(gpsData.FullGpsCode); // //根据上一点计算里程 // ComputeMileAgeAndVerifyData(ref gpsData, aLastData, mMaxSpeedMeterPerSecond); // ObjectList.Add(gpsData.BaseData); // blnIsPosData = true; // } // else if (buf[2] == 0x8E)//补传数据 // { // gpsData = GPSDataDecoder(buf); //数据补传解析 // ComputeMileAgeAndVerifyDataForFetch(ref gpsData, mMaxSpeedMeterPerSecond); // ObjectList.Add(gpsData.BaseData); // } // else if (buf[2] == 0x8D) // { // ProcessPictureFrame(buf); // } // break; // default: // if (buf[2] == 0xB1) // { // var reply = LongHanInstructionSet.CenterReply(buf); // string[] strremortpoint = sessionID.Split(':'); // IPEndPoint ippoint = new IPEndPoint(IPAddress.Parse(strremortpoint[0]), int.Parse(strremortpoint[1])); // OnSendDataEvent((EndPoint)ippoint, reply); // OnAddConnectionEvent(gpsCode, sessionID); // } // //else //应答数据 // if (buf[2] == 0x85) // { // OnPostSendAnswerHandlerEvent(string.Empty, true, gpsCode, ControlCmdType.LongHanAnswered, true); // gpsData = ConvertBytesToEntity(buf); // //ObjectList.Add(gpsData.BaseData); // } // else if (buf[2] == 0x80)//位置数据 // { // gpsData = GPSDataDecoder(buf); //数据解析 // //将连接加入连接集合,如果是连接后的第一点数据,则同时会更新路由关系表 // //注意UpdateFirstDataRela的先后关系 // if (!String.IsNullOrEmpty(gpsData.FullGpsCode)) // { // OnAddConnectionEvent(gpsData.FullGpsCode, sessionID); // } // //更新上一次数据 // if (TCPConnList.Instance().IsFirstDataOfConn(sessionID)) // { // //更新上一点数据 // CacheUtility.UpdateLastGPSData(gpsData.FullGpsCode); // //更改记录状态,标明以后的数据已不是第一点数据 // TCPConnList.Instance().UpdateFirstDataRela(sessionID, 0); // } // //获取上一个GPS数据点 // GPSDataEntity aLastData = GetLastGPSData(gpsData.FullGpsCode); // //根据上一点计算里程 // ComputeMileAgeAndVerifyData(ref gpsData, aLastData, mMaxSpeedMeterPerSecond); // ObjectList.Add(gpsData.BaseData); // blnIsPosData = true; // } // else if (buf[2] == 0x8E)//补传数据 // { // gpsData = GPSDataDecoder(buf); //数据补传解析 // ComputeMileAgeAndVerifyDataForFetch(ref gpsData, mMaxSpeedMeterPerSecond); // ObjectList.Add(gpsData.BaseData); // } // else if (buf[2] == 0x8D) //图片回传数据 // { // ProcessPictureFrame(buf); // } #endregion if (gpsData != null) { LongHanData aLongHanDataGpsData = gpsData as LongHanData; if (blnIsPosData) { if (aLongHanDataGpsData.BaseData.PlunderState == 0) { aResponseList = new List<byte[]>(); aResponseList.Add(CreateCancelAlarmMessage(buf)); } } //gpsCode = aLongHanDataGpsData.BaseData.GPSCode; } // break; //} return ObjectList; }
//private static void UpdatePhotoingType(string strGPSCode, byte PhotoingType) //{ // Logger.Info("[拍照]设置拍照类型:GPSCode:" + strGPSCode + "--PhotoingType:" + PhotoingType.ToString()); // lock (CurPhotoingType) // { // if (CurPhotoingType.ContainsKey(strGPSCode)) // CurPhotoingType[strGPSCode] = PhotoingType; // else // CurPhotoingType.Add(strGPSCode, PhotoingType); // } //} public BoShiJieDataParser(TransfersType t, string codefix, IGPSDataProcessor Storage) : base(t, Storage) { //照片最大上传时间 TAKEPICTURETIMEOUT = 80; base.TransfersType = t; base.CodePrefix = codefix; if (t == TransfersType.IsTcp) { BoShiJiePictures.Instance.ParserTCP = this; _ProcessAppLayerCmd = new ProcessAppLayerCmd(this); _ProcessAppLayerCmd.SendAnswerToWebEvent += new ProcessAppLayerCmd.SendAnswerToWebHandler(base .OnSendAnswerToWebEvent); _ProcessAppLayerCmd.SendDataEvent += new ProcessAppLayerCmd.SendDataHandler(base.OnSendDataEvent); } //拍照路径 PhotoPath = ConfigHelper.GetConfig("PhotoPath"); if (t == TransfersType.IsUdp) { BoShiJiePictures.Instance.ParserUDP = this; BoShiJieVehicleSettings.Instance.Parser = this; ClearEvent += new ClearEnvironment(BoShiJiePictures.Instance.RemovePic); HardwareSendPic = new Dictionary<string, BoShiJiePicture>(); } }
/// <summary> 将接收到的数据加入队列 /// /// </summary> /// <param name="receivedBytes"></param> //public override void AddInBytesQueue(SessionData sessionData) //{ // lock (ReceivedBytesQueue) // { // ReceivedBytesQueue.Enqueue(sessionData); // } //} public DiBiaoDataParser(TransfersType t, string codefix,IGPSDataProcessor Storage) : base(t,Storage) { //base.StorageService = Storage; base.TransfersType = t; base.CodePrefix = codefix; _ProcessAppLayerCmd = new ProcessAppLayerCmd(this); _ProcessAppLayerCmd.SendAnswerToWebEvent += new ProcessAppLayerCmd.SendAnswerToWebHandler(base .OnSendAnswerToWebEvent); _ProcessAppLayerCmd.SendDataEvent += new ProcessAppLayerCmd.SendDataHandler(base.OnSendDataEvent); //拍照初始化数据 InitData(); }
/// <summary> /// 解析GPS数据 /// </summary> /// <param name="transferType">传输数据的协议类型:如TCP、UDP</param> /// <param name="buf">接收到的byte数据</param> /// <param name="aResponseList">需返回的应答数据</param> /// <param name="gpsCode">解析后输出的GPSCode</param> /// <param name="sessionID">会话ID</param> /// <returns></returns> public List<GPSDataEntity> Parse(TransfersType transferType, byte[] buf, out List<byte[]> aResponseList, out string fullGpsCode, string sessionID) { fullGpsCode = string.Empty; string gpscode = GetGpsCodeByBytes(buf); fullGpsCode = base.CodePrefix + gpscode; aResponseList = new List<byte[]>(); //updated by lixun 对于图像数据0x8D统一在后面进行回应处理 if (buf[2] != 0x85 || buf[2] != 0x8D) { byte[] ReplyMsg = LongHanInstructionSet.CenterReply(buf); if (base.TransfersType == TransfersType.IsTcp && buf[2] == 0x80) { //对于TCP通道的定位数据,要根据状态位确定是不是需要回复 } else { if (buf[2] == 0xA0 && base.TransfersType == TransfersType.IsUdp) { //根据协议,回复指令需要采用TCP协议 SendToVehicle(fullGpsCode, ReplyMsg); } else { aResponseList.Add(ReplyMsg); } } } LongHanData gpsData = null; int iNeedReply=0; List<GPSDataEntity> ObjectList = new List<GPSDataEntity>(); bool blnIsPosData = false; switch (buf[2]) { case 0xB1://握手 if (String.IsNullOrEmpty(gpscode)) break; if (transferType == TransfersType.IsTcp) { OnAddConnectionEvent(fullGpsCode, sessionID); } else { var reply = LongHanInstructionSet.CenterReply(buf); string[] strremortpoint = sessionID.Split(':'); IPEndPoint ippoint = new IPEndPoint(IPAddress.Parse(strremortpoint[0]), int.Parse(strremortpoint[1])); OnSendDataEvent((EndPoint)ippoint, reply); OnAddConnectionEvent(fullGpsCode, sessionID); } var robberyImageSetting = LongHanVehicleSettings.Instance.SendRobberyImageSetting(fullGpsCode); if (robberyImageSetting != null) aResponseList.Add(robberyImageSetting); break; case 0x80://主发位置数据 StringBuilder builer = new StringBuilder(); gpsData = GPSDataDecoder(buf, ref iNeedReply); //TCP 方式时,终端上发信息到中心的指令,根据位置数据里的中心是否应答设置来确认是否下发确认信息 if (iNeedReply == 1 && transferType==TransfersType.IsTcp) { aResponseList.Add(LongHanInstructionSet.CenterReply(buf)); } //aResponseList.Add(LongHanInstructionSet.SetAccOnTimingUpload(fullGpsCode)); //将连接加入连接集合,如果是连接后的第一点数据,则同时会更新路由关系表 //注意UpdateFirstDataRela的先后关系 if (!String.IsNullOrEmpty(gpsData.FullGpsCode)) { OnAddConnectionEvent(gpsData.FullGpsCode, sessionID); } //更新上一次数据 if (TCPConnList.Instance().IsFirstDataOfConn(sessionID)) { //更改记录状态,标明以后的数据已不是第一点数据 TCPConnList.Instance().UpdateFirstDataRela(sessionID, 0); } ObjectList.Add(gpsData.BaseData); blnIsPosData = true; break; case 0x8E://补传位置数据 try { gpsData = GPSDataDecoder(buf, ref iNeedReply); //数据补传解析 ComputeMileAgeAndVerifyDataForFetch(ref gpsData, mMaxSpeedMeterPerSecond); ObjectList.Add(gpsData.BaseData); } catch { } break; case 0x85://终端应答 OnPostSendAnswerHandlerEvent(string.Empty, true, fullGpsCode, ControlCmdType.LongHanAnswered, true); gpsData = ConvertBytesToEntity(buf, ref iNeedReply); break; case 0x8D://图片帧数据 //if (ProcessPictureFrame(buf)) //{ // //updated by lixun 龙瀚工程师答复:如果对每一个图片数据包进行UDP回应,但是对于最后一个数据包,如果发 // //现有丢包的情况,则不需要回应,等待补发 // aResponseList.Add(LongHanInstructionSet.CenterReply(buf)); //} break; case 0xA0://图片上传提示 //LongHanPictures.Instance.Remove(fullGpsCode); break; default: break; } #region 备份 //switch (transferType) //{ // //若是TCP的数据,只做解析,不存数据库 // case TransfersType.IsTcp: // if (buf[2] == 0xB1) // { // if (!String.IsNullOrEmpty(gpscode)) // { // OnAddConnectionEvent(gpsCode, sessionID); // var robberyImageSetting = LongHanVehicleSettings.Instance.SendRobberyImageSetting(gpsCode); // if (robberyImageSetting != null) // aResponseList.Add(robberyImageSetting); // } // } // else if (buf[2] == 0x85) // { // OnPostSendAnswerHandlerEvent(string.Empty, true, gpsCode, ControlCmdType.LongHanAnswered, true); // gpsData = ConvertBytesToEntity(buf); // //ObjectList.Add(gpsData.BaseData); // } // else if (buf[2] == 0x80) // { // gpsData = GPSDataDecoder(buf); //数据解析 // //将连接加入连接集合,如果是连接后的第一点数据,则同时会更新路由关系表 // //注意UpdateFirstDataRela的先后关系 // if (!String.IsNullOrEmpty(gpsData.FullGpsCode)) // { // OnAddConnectionEvent(gpsData.FullGpsCode, sessionID); // gpsCode = gpsData.FullGpsCode; // var robberyImageSetting = LongHanVehicleSettings.Instance.SendRobberyImageSetting(gpsCode); // if (robberyImageSetting != null) // aResponseList.Add(robberyImageSetting); // } // //更新上一次数据 // if (TCPConnList.Instance().IsFirstDataOfConn(sessionID)) // { // //更新上一点数据 // CacheUtility.UpdateLastGPSData(gpsData.FullGpsCode); // //更改记录状态,标明以后的数据已不是第一点数据 // TCPConnList.Instance().UpdateFirstDataRela(sessionID, 0); // } // //获取上一个GPS数据点 // GPSDataEntity aLastData = GetLastGPSData(gpsData.FullGpsCode); // //根据上一点计算里程 // ComputeMileAgeAndVerifyData(ref gpsData, aLastData, mMaxSpeedMeterPerSecond); // ObjectList.Add(gpsData.BaseData); // blnIsPosData = true; // } // else if (buf[2] == 0x8E)//补传数据 // { // gpsData = GPSDataDecoder(buf); //数据补传解析 // ComputeMileAgeAndVerifyDataForFetch(ref gpsData, mMaxSpeedMeterPerSecond); // ObjectList.Add(gpsData.BaseData); // } // else if (buf[2] == 0x8D) // { // ProcessPictureFrame(buf); // } // break; // default: // if (buf[2] == 0xB1) // { // var reply = LongHanInstructionSet.CenterReply(buf); // string[] strremortpoint = sessionID.Split(':'); // IPEndPoint ippoint = new IPEndPoint(IPAddress.Parse(strremortpoint[0]), int.Parse(strremortpoint[1])); // OnSendDataEvent((EndPoint)ippoint, reply); // OnAddConnectionEvent(gpsCode, sessionID); // } // //else //应答数据 // if (buf[2] == 0x85) // { // OnPostSendAnswerHandlerEvent(string.Empty, true, gpsCode, ControlCmdType.LongHanAnswered, true); // gpsData = ConvertBytesToEntity(buf); // //ObjectList.Add(gpsData.BaseData); // } // else if (buf[2] == 0x80)//位置数据 // { // gpsData = GPSDataDecoder(buf); //数据解析 // //将连接加入连接集合,如果是连接后的第一点数据,则同时会更新路由关系表 // //注意UpdateFirstDataRela的先后关系 // if (!String.IsNullOrEmpty(gpsData.FullGpsCode)) // { // OnAddConnectionEvent(gpsData.FullGpsCode, sessionID); // } // //更新上一次数据 // if (TCPConnList.Instance().IsFirstDataOfConn(sessionID)) // { // //更新上一点数据 // CacheUtility.UpdateLastGPSData(gpsData.FullGpsCode); // //更改记录状态,标明以后的数据已不是第一点数据 // TCPConnList.Instance().UpdateFirstDataRela(sessionID, 0); // } // //获取上一个GPS数据点 // GPSDataEntity aLastData = GetLastGPSData(gpsData.FullGpsCode); // //根据上一点计算里程 // ComputeMileAgeAndVerifyData(ref gpsData, aLastData, mMaxSpeedMeterPerSecond); // ObjectList.Add(gpsData.BaseData); // blnIsPosData = true; // } // else if (buf[2] == 0x8E)//补传数据 // { // gpsData = GPSDataDecoder(buf); //数据补传解析 // ComputeMileAgeAndVerifyDataForFetch(ref gpsData, mMaxSpeedMeterPerSecond); // ObjectList.Add(gpsData.BaseData); // } // else if (buf[2] == 0x8D) //图片回传数据 // { // ProcessPictureFrame(buf); // } #endregion if (gpsData != null) { LongHanData aLongHanDataGpsData = gpsData as LongHanData; if (blnIsPosData) { if (aLongHanDataGpsData.BaseData.PlunderState == 0) { aResponseList = new List<byte[]>(); aResponseList.Add(CreateCancelAlarmMessage(buf)); } } //gpsCode = aLongHanDataGpsData.BaseData.GPSCode; } // break; //} return ObjectList; }
public LongHanDataParser(TransfersType t, string codefix,IGPSDataProcessor Storage) : base(t, Storage) { base.TransfersType = t; base.CodePrefix = codefix; _ProcessAppLayerCmd = new ProcessAppLayerCmd(this); _ProcessAppLayerCmd.SendAnswerToWebEvent += new ProcessAppLayerCmd.SendAnswerToWebHandler(base .OnSendAnswerToWebEvent); _ProcessAppLayerCmd.SendDataEvent += new ProcessAppLayerCmd.SendDataHandler(base.OnSendDataEvent); //拍照路径 PhotoPath = ConfigHelper.GetConfig("PhotoPath"); //LongHanPictures.Instance.Parser = this; LongHanVehicleSettings.Instance.Parser = this; //if (t == TransfersType.IsTcp) //{ // ContinuouslyShutters.Instance.IntervalTakePhoto = new ContinuouslyShutters.IntervalTakePhotoHandler(LongHanContinuouslyTakePhotoHandler); // IntervalShutters.Instance.Parser = this; // IntervalShutters.Instance.ReloadSetting(codefix); // IntervalShutters.Instance.IntervalTakePhoto = new ContinuouslyShutters.IntervalTakePhotoHandler(LongHanIntervalTakePhotoHandler); //} }