Пример #1
0
        /// <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);
        }
Пример #2
0
 /// <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);
 }
Пример #3
0
        /// <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);
        }
Пример #4
0
        /// <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);
        }
Пример #5
0
        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);
        }
Пример #6
0
        /// <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));
            }
        }