/// <summary> /// 处理请求用户信息 /// </summary> /// <param name="response"></param> /// <param name="frameBean"></param> private void HandleRequestUserInfo(ref byte[] response, TcpFrameBean frameBean) { byte[] body = frameBean.DataBody; string idcard = ProtocolUtil.GetEndUserIdString(body, 0); byte[] data = MakerTCPFrame.GetInstance().Make800AFrame(idcard); response = MakerTCPFrame.GetInstance().PackData(MsgId.X800A, frameBean.TerminalId, data); }
/// <summary> /// 处理心跳 /// </summary> /// <param name="response"></param> /// <param name="frameBean"></param> public void HandleHeartBeat(ref byte[] response, TcpFrameBean frameBean) { try { onlineDeviceService.SavaOrUpdateOnlineInfo(frameBean); }catch (Exception ex) { logger.Error("心跳更新或存储在线时间时发生异常:" + ex.ToString()); } byte[] data = MakerTCPFrame.GetInstance().Make8001Frame(frameBean.SerialNo, frameBean.MsgId, CommResponse.Success); response = MakerTCPFrame.GetInstance().PackData(MsgId.X8001, frameBean.TerminalId, data); }
/// <summary> /// 处理请求处方信息 /// </summary> /// <param name="response"></param> /// <param name="frameBean"></param> public void HandleStartPrictice(ref byte[] response, TcpFrameBean frameBean) { var maker = MakerTCPFrame.GetInstance();; byte[] data = frameBean.DataBody; string userId = ProtocolUtil.GetEndUserIdString(data, 0); DeviceType deviceType = (DeviceType)data[32]; byte[] d = maker.Make8008Frame(userId, deviceType); response = MakerTCPFrame.GetInstance().PackData(MsgId.X8008, frameBean.TerminalId, d); }
/// <summary> /// 处理训练结果上报 /// </summary> /// <param name="response"></param> /// <param name="frameBean"></param> private void HandlePricticeResult(ref byte[] response, TcpFrameBean frameBean) { ParserPricticeResult paser = new ParserPricticeResult(); byte[] body = frameBean.DataBody; string idCard = ProtocolUtil.GetEndUserIdString(body, 0); byte[] d = new byte[body.Length - 32]; Array.Copy(body, 32, d, 0, d.Length); //设备类型 DeviceType deviceType = (DeviceType)d[0]; logger.Info("收到训练结果上报,设备是:" + deviceType.ToString()); paser.PaserXall(d, idCard, deviceType); //数据上报响应通用应答 byte[] data = MakerTCPFrame.GetInstance().Make8001Frame(frameBean.SerialNo, frameBean.MsgId, CommResponse.Success); response = MakerTCPFrame.GetInstance().PackData(MsgId.X8001, frameBean.TerminalId, data); }
public byte[] Parser(byte[] source) { byte[] response = new byte[0]; byte[] buffer = ProtocolUtil.UnTransfer(source); MsgId msgId = ProtocolUtil.BytesToMsgId(buffer, 0); Int16 data_len = BitConverter.ToInt16(buffer, 2); data_len = IPAddress.NetworkToHostOrder(data_len); string terminalId = ProtocolUtil.BcdToString(buffer, 4, 6); Int16 serialNo = BitConverter.ToInt16(buffer, 10); serialNo = IPAddress.NetworkToHostOrder(serialNo); byte xor = buffer[12 + data_len]; //数据体 byte[] data = new byte[data_len]; Array.Copy(buffer, 12, data, 0, data_len); byte calcXor = ProtocolUtil.XorByByte(buffer, 0, 12 + data_len); TcpFrameBean frameBean = new TcpFrameBean(); frameBean.DataBody = data; frameBean.SerialNo = serialNo; frameBean.TerminalId = terminalId; frameBean.MsgId = msgId; frameBean.DeviceType = (DeviceType)buffer[4]; if (xor != calcXor) { logger.Error("校验码不符合预期:" + ProtocolUtil.BytesToString(source)); frameBean.AppendErrorMsg("校验码不符合预期"); byte[] d = MakerTCPFrame.GetInstance().Make8001Frame(serialNo, MsgId.X0001, CommResponse.MistakeMsg); response = MakerTCPFrame.GetInstance().PackData(MsgId.X8001, frameBean.TerminalId, d); return(response); } switch (msgId) { case MsgId.X0001: //设备通用应答 break; case MsgId.X0002: //心跳OK logger.Info("收到心跳:" + ProtocolUtil.BytesToString(source)); WriteLogFile("收到心跳:" + ProtocolUtil.BytesToString(source)); HandleHeartBeat(ref response, frameBean); break; case MsgId.X0008: //开始训练 logger.Info("收到开始训练请求:" + ProtocolUtil.BytesToString(source)); WriteLogFile("收到开始训练请求:" + ProtocolUtil.BytesToString(source)); HandleStartPrictice(ref response, frameBean); break; case MsgId.X0009: //训练结果上报 logger.Info("收到训练结果上报:" + ProtocolUtil.BytesToString(source)); WriteLogFile("收到训练结果上报:" + ProtocolUtil.BytesToString(source)); byte[] dd = MakerTCPFrame.GetInstance().Make8001Frame(serialNo, MsgId.X0001, CommResponse.Success); response = MakerTCPFrame.GetInstance().PackData(MsgId.X8001, frameBean.TerminalId, dd); HandlePricticeResult(ref response, frameBean); break; case MsgId.X000A: //请求使用者信息 logger.Info("收到请求使用者信息:" + ProtocolUtil.BytesToString(source)); WriteLogFile("收到请求使用者信息:" + ProtocolUtil.BytesToString(source)); HandleRequestUserInfo(ref response, frameBean); break; case MsgId.X0007: //请求照片数据OK logger.Info("收到请求照片数据OK:" + ProtocolUtil.BytesToString(source)); WriteLogFile("收到请求照片数据OK:" + ProtocolUtil.BytesToString(source)); HandleRequestImageData(ref response, frameBean); break; default: logger.Error("收到未知消息:" + ProtocolUtil.BytesToString(source)); WriteLogFile("收到未知消息:" + ProtocolUtil.BytesToString(source)); frameBean.AppendErrorMsg("未知的消息ID"); byte[] d = MakerTCPFrame.GetInstance().Make8001Frame(serialNo, MsgId.X0001, CommResponse.UnSupport); response = MakerTCPFrame.GetInstance().PackData(MsgId.X8001, frameBean.TerminalId, d); break; } logger.Info("响应的报文:" + ProtocolUtil.BytesToString(response)); WriteLogFile("响应的报文:" + ProtocolUtil.BytesToString(response)); return(response); }
/// <summary> /// 保存或更新在线信息,没有该ID则保存,有则更新时间 /// </summary> /// <param name="frameBean"></param> public void SavaOrUpdateOnlineInfo(TcpFrameBean frameBean) { var onlineDevice = onlineDeviceDAO.GetByClientId(frameBean.TerminalId); if (onlineDevice == null)//插入 { onlineDevice = new OnlineDevice(); string name_zh = ""; string name_en = ""; //设置设备中英文设备名称 switch (frameBean.DeviceType) { case DeviceType.P00: name_en = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.EN, "NewDev.Rowing"); name_zh = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.ZH, "NewDev.Rowing"); break; case DeviceType.P01: name_en = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.EN, "NewDev.ChestPress"); name_zh = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.ZH, "NewDev.ChestPress"); break; case DeviceType.P02: name_en = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.EN, "NewDev.HorizontalLegPress"); name_zh = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.ZH, "NewDev.HorizontalLegPress"); break; case DeviceType.P03: name_en = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.EN, "NewDev.AbdominalMuscleTraining"); name_zh = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.ZH, "NewDev.AbdominalMuscleTraining"); break; case DeviceType.P04: name_en = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.EN, "NewDev.TricepsTraining"); name_zh = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.ZH, "NewDev.TricepsTraining"); break; case DeviceType.P05: name_en = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.EN, "NewDev.LegAbduction"); name_zh = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.ZH, "NewDev.LegAbduction"); break; case DeviceType.P06: name_en = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.EN, "NewDev.LegInturn"); name_zh = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.ZH, "NewDev.LegInturn"); break; case DeviceType.P07: name_en = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.EN, "NewDev.ButterflyMachine"); name_zh = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.ZH, "NewDev.ButterflyMachine"); break; case DeviceType.P08: name_en = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.EN, "NewDev.ReverseButterflyMachine"); name_zh = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.ZH, "NewDev.ReverseButterflyMachine"); break; case DeviceType.P09: name_en = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.EN, "NewDev.SittingBackExtender"); name_zh = LanguageUtils.GetLanuageStrByLanguageAndKey(LanguageUtils.ZH, "NewDev.SittingBackExtender"); break; default: break; } onlineDevice.od_gmt_modified = DateTime.Now; onlineDevice.od_clientid = frameBean.TerminalId; onlineDevice.od_clientname_en = name_en; onlineDevice.od_clientname_ch = name_zh; //插入记录 onlineDeviceDAO.Insert(onlineDevice); //插入至上传表 UploadManagementDAO uploadManagementDao = new UploadManagementDAO(); uploadManagementDao.Insert(new UploadManagement(onlineDevice.pk_od_id, "bdl_onlinedevice", 0)); } else//更新 { //更新心跳时间 onlineDeviceDAO.UpdateOnlineTime(onlineDevice.pk_od_id, DateTime.Now); //插入至上传表 UploadManagementDAO uploadManagementDao = new UploadManagementDAO(); uploadManagementDao.Insert(new UploadManagement(onlineDevice.pk_od_id, "bdl_onlinedevice", 1)); } }