コード例 #1
0
 /// <summary>
 ///终端参数设置指令(启明自定义扩展参数)
 /// </summary>
 /// <param name="sysflag"></param>
 /// <param name="token"></param>
 /// <param name="cid"></param>
 /// <param name="tno"></param>
 /// <param name="paramlist"></param>
 /// <returns></returns>
 public static bool Send_CTS_SetTermParamDownQMExtend(string sysflag, string token, long cid, long tno, List <CTS_SetTermParamDown.TerminalParamItem> paramlist)
 {
     foreach (var sa in paramlist)
     {
         List <CTS_SetTermParamDown.TerminalParamItem> paramlist_one = new List <CTS_SetTermParamDown.TerminalParamItem>();
         paramlist_one.Add(sa);
         QMDPartnerPackage package = RequestPackage.getSetTermParamDown(tno, paramlist_one, 85);
         bool sd = RDSConfig.SendMsg(sysflag, token, cid, package);
         if (!sd)
         {
             return(false);
         }
     }
     return(true);
 }
コード例 #2
0
ファイル: RDSConfig.cs プロジェクト: qingsangde/learngit
        /// <summary>
        /// 数据包晚自习检查
        /// </summary>
        /// <param name="data"></param>
        /// <param name="rMsg"></param>
        /// <returns></returns>
        private static Boolean checkPackage(byte[] data, ref QMDPartnerPackage rMsg)
        {
            Boolean isFlag = false;

            try
            {
                //处理返回的数据包
                MemoryStream ms = new MemoryStream(data);
                rMsg   = ProtoBuf.Serializer.Deserialize <QMDPartnerPackage>(ms);
                isFlag = true;
            }
            catch (Exception ex)
            {
                isFlag = false;
            }
            return(isFlag);
        }
コード例 #3
0
        /// <summary>
        ///  下发透传指令
        /// </summary>
        /// <param name="sysflag"></param>
        /// <param name="token"></param>
        /// <param name="cid"></param>
        /// <param name="tno"></param>
        /// <param name="TransId">透传ID</param>
        /// <param name="TransmissionData">透传数据</param>
        /// <returns></returns>
        public static bool Send_CTS_TransmissionProtocol(string sysflag, string token, long cid, long tno, int TransId, byte[] TransmissionData)
        {
            QMDPartnerPackage package = RequestPackage.getCTS_TransmissionProtocol(tno, TransId, TransmissionData);

            return(RDSConfig.SendMsg(sysflag, token, cid, package));
        }
コード例 #4
0
        /// <summary>
        /// 下发车辆点名指令
        /// </summary>
        /// <param name="sysflag"></param>
        /// <param name="token"></param>
        /// <param name="cid"></param>
        /// <param name="tno"></param>
        /// <returns></returns>
        public static bool Send_CTS_TermSearchRequest(string sysflag, string token, long cid, long tno)
        {
            QMDPartnerPackage package = RequestPackage.getTermSearchRequest(tno);

            return(RDSConfig.SendMsg(sysflag, token, cid, package));
        }
コード例 #5
0
        public static bool Send_DriveRecordDownCMDDown_VIN_NUM_TYPE(string sysflag, string token, long cid, long tno, string vin, string platenum, string plateType)
        {
            QMDPartnerPackage package = RequestPackage.getDriveRecordDownCMDDown_VIN_NUM_TYPE(tno, vin, platenum, plateType);

            return(RDSConfig.SendMsg(sysflag, token, cid, package));
        }
コード例 #6
0
        public static bool Send_DriveRecordDownCMDDown_CharacterQuotient(string sysflag, string token, long cid, long tno, uint quotient)
        {
            QMDPartnerPackage package = RequestPackage.getDriveRecordDownCMDDown_CharacterQuotient(tno, quotient);

            return(RDSConfig.SendMsg(sysflag, token, cid, package));
        }
コード例 #7
0
        /// <summary>
        /// 下发行驶记录数据采集命令
        /// 命令字0x00 采集记录仪执行标准版本
        /// 命令字0x01 采集当前驾驶人信息(机动车驾驶证号码)
        /// 命令字0x02 采集记录仪的实时时钟
        /// 命令字0x03  采集累计行程里程
        /// 命令字0x04  采集记录仪脉冲系数
        /// 命令字0x05  采集车辆信息(车辆识别代号、机动车号牌号码、机动车号牌分类)
        /// 命令字0x06  采集记录仪状态信号配置信息
        /// 命令字0x07  采集记录仪唯一性编号
        /// 命令字0x08  采集指定的行驶速度记录,有时间参数,跨度不超过1小时
        /// 命令字0x09  采集指定的位置信息记录,有时间参数,跨度不超过1小时
        /// 命令字0x10  采集指定的事故疑点记录,有时间参数,跨度不超过1分钟
        /// 命令字0x11  采集指定的超时驾驶记录,有时间参数,跨度不超过7天
        /// 命令字0x12  采集指定的驾驶人身份记录,有时间参数,跨度不超过7天
        /// 命令字0x13  采集指定的外部供电记录,有时间参数,跨度不超过7天
        /// 命令字0x14  采集指定的参数修改记录,有时间参数,跨度不超过7天
        /// 命令字0x15  采集指定的速度状态日志,有时间参数,跨度不超过1分钟
        /// </summary>
        /// <param name="sysflag"></param>
        /// <param name="token"></param>
        /// <param name="cid"></param>
        /// <param name="tno"></param>
        /// <param name="ncmd"></param>
        /// <param name="nType"></param>
        /// <param name="nBeginDateTime"></param>
        /// <param name="nEndDateTime"></param>
        /// <returns></returns>
        public static bool Send_CTS_DriveRecordDataCollectionRequest(string sysflag, string token, long cid, long tno, uint ncmd, uint nType = 0, long nBeginDateTime = 0, long nEndDateTime = 0)
        {
            QMDPartnerPackage package = RequestPackage.getDriveRecordDataCollectionRequest(tno, ncmd, nType, nBeginDateTime, nEndDateTime);

            return(RDSConfig.SendMsg(sysflag, token, cid, package));
        }
コード例 #8
0
        /// <summary>
        /// 下发立即牌照指令
        /// </summary>
        /// <param name="sysflag"></param>
        /// <param name="token"></param>
        /// <param name="cid"></param>
        /// <param name="tno"></param>
        /// <returns></returns>
        public static bool Send_CTS_ImageRequestDown(string sysflag, string token, long cid, long tno, uint ch = 0)
        {
            QMDPartnerPackage package = RequestPackage.getImageRequestDown(tno, ch);

            return(RDSConfig.SendMsg(sysflag, token, cid, package));
        }
コード例 #9
0
        /// <summary>
        ///终端参数设置指令
        /// </summary>
        /// <param name="sysflag"></param>
        /// <param name="token"></param>
        /// <param name="cid"></param>
        /// <param name="tno"></param>
        /// <param name="paramlist"></param>
        /// <returns></returns>
        public static bool Send_CTS_SetTermParamDown(string sysflag, string token, long cid, long tno, List <CTS_SetTermParamDown.TerminalParamItem> paramlist)
        {
            QMDPartnerPackage package = RequestPackage.getSetTermParamDown(tno, paramlist);

            return(RDSConfig.SendMsg(sysflag, token, cid, package));
        }
コード例 #10
0
ファイル: RDSConfig.cs プロジェクト: qingsangde/learngit
        public static bool SendMsg(string sysflag, string token, long cid, QMDPartnerPackage package)
        {
            RDSConfigModel rcm = GetRDS(sysflag, cid);

            if (rcm == null)
            {
                return(false);
            }
            TcpCli tc = rcm.TcpClient;

            try
            {
                if (tc.IsConnected)
                {
                    byte[]       sfdata  = Encoding.ASCII.GetBytes(sysflag);
                    byte[]       ciddata = System.BitConverter.GetBytes(cid);
                    MemoryStream ms      = new MemoryStream();
                    ProtoBuf.Serializer.Serialize(ms, package);
                    byte[] bytes = new byte[ms.Length];
                    ms.Seek(0, SeekOrigin.Begin);
                    ms.Read(bytes, 0, bytes.Length);
                    ms.Close();
                    //将系统标示加入数据头部长度20字节,CID数据 8个字节
                    byte[] data = new byte[bytes.Length + 20 + 8];
                    Array.Copy(sfdata, data, sfdata.Length);
                    Array.Copy(ciddata, 0, data, 20, 8);
                    Array.Copy(bytes, 0, data, 28, bytes.Length);
                    tc.SendData(data);
                    if (package.dwPackageType == 30 && (package.dwOperation1 == 10 || package.dwOperation1 == 33 || package.dwOperation1 == 41 || package.dwOperation1 == 99)) //需要回传数据的记录指令,以便于应答 时确认发送者
                    {
                        if (package.dwOperation1 == 41)                                                                                                                        //行驶记录仪参数查询特殊处理同时加入命令字做为指令细分
                        {
                            MemoryStream msc = new MemoryStream(package.byteContext);
                            CTS_DriveRecordDataCollectionRequest reqdata = ProtoBuf.Serializer.Deserialize <CTS_DriveRecordDataCollectionRequest>(msc);
                            AddOrder(sysflag, token, cid, package.dwPackageType, package.dwOperation1, reqdata.nCMD.ToString());
                        }
                        else if (package.dwOperation1 == 99)//透传指令 下发加入透传id作为细分指令
                        {
                            MemoryStream             msc     = new MemoryStream(package.byteContext);
                            CTS_TransmissionProtocol reqdata = ProtoBuf.Serializer.Deserialize <CTS_TransmissionProtocol>(msc);
                            string extflag = reqdata.nTransID.ToString("X2");
                            if (reqdata.nTransID == 0x8F02)//解放消贷控制指令特殊处理,因为上行和下行nTransID不一致。此处填充上行id方便回指令结果
                            {
                                int respnTransID = reqdata.nTransID == 0x8F02 ? 0x0f01 : reqdata.nTransID;
                                extflag = respnTransID.ToString("X2") + reqdata.sData[0].ToString("X2") + reqdata.sData[1].ToString("X2");
                                AddOrder(sysflag, token, cid, package.dwPackageType, package.dwOperation1, extflag);
                            }
                        }
                        else
                        {
                            AddOrder(sysflag, token, cid, package.dwPackageType, package.dwOperation1);
                        }
                    }
                    return(true);
                }
                else
                {
                    LogHelper.WriteInfo(sysflag + "RDS连接中断发送数据失败(" + string.Join(",", rcm.SysFlag) + ")");
                    if (ReConnect(tc))
                    {
                        LogHelper.WriteInfo(sysflag + "RDS服务(" + rcm.RDSMark + ")重连成功发送数据!");
                        return(SendMsg(sysflag, token, cid, package));
                    }
                    else
                    {
                        return(false);
                    }
                }
            }
            catch (Exception ex)
            {
                LogHelper.WriteError(sysflag + "程序异常发送数据失败! ", ex);
                return(false);
            }
        }
コード例 #11
0
ファイル: RDSConfig.cs プロジェクト: qingsangde/learngit
        static void tc_ReceivedDatagram(object sender, NetEventArgs e)
        {
            //LogHelper.WriteInfo("接收到RDS推送数据包");
            List <byte[]> DataPakages = e.Client.Datagram;

            foreach (byte[] vdata in DataPakages)
            {
                byte[] recdata = vdata;
                if (recdata.Length < 28)
                {
                    return;
                }
                byte[] sfdata  = new byte[20];
                byte[] ciddata = new byte[8];
                byte[] data    = new byte[recdata.Length - 20 - 8];
                Array.Copy(recdata, sfdata, 20);
                Array.Copy(recdata, 20, ciddata, 0, 8);
                Array.Copy(recdata, 28, data, 0, data.Length);

                string sysflag = Encoding.ASCII.GetString(sfdata);
                sysflag = sysflag.Replace("\0", "");
                long carid = System.BitConverter.ToInt64(ciddata, 0);
                QMDPartnerPackage datapag = null;
                if (checkPackage(data, ref datapag))
                {
                    //车辆在线通知信息包
                    if (datapag.dwOperation1 == 10101 && datapag.dwOperation2 == 20202)
                    {
                        MemoryStream msc = new MemoryStream(datapag.byteContext);
                        if (datapag.byteContext.Length > 0)
                        {
                            Dictionary <long, int> reqdata = ProtoBuf.Serializer.Deserialize <Dictionary <long, int> >(msc);
                            foreach (long cid in reqdata.Keys)
                            {
                                SetCarOnlineStatus(sysflag, cid, reqdata[cid]);
                            }
                        }
                    }

                    string key     = sysflag + "|" + carid + "|" + datapag.dwPackageType + "|" + datapag.dwOperation1 + "|";
                    string extflag = "";
                    if (datapag.dwOperation1 == 41)//特殊处理行驶记录仪查询同时加入命令字做为指令细分
                    {
                        MemoryStream msc = new MemoryStream(datapag.byteContext);
                        CTS_DriveRecordDataUpResponse reqdata = ProtoBuf.Serializer.Deserialize <CTS_DriveRecordDataUpResponse>(msc);
                        key    += reqdata.nCMD.ToString();
                        extflag = reqdata.nCMD.ToString();
                    }
                    else if (datapag.dwOperation1 == 99)//透传指令 下发加入透传id作为细分指令
                    {
                        MemoryStream             msc     = new MemoryStream(datapag.byteContext);
                        CTS_TransmissionProtocol reqdata = ProtoBuf.Serializer.Deserialize <CTS_TransmissionProtocol>(msc);
                        extflag = reqdata.nTransID.ToString("X2");
                        if (reqdata.nTransID == 0x0f01)//解放消贷控制指令特殊处理,因为上行和下行nTransID不一致。此处填充上行id方便回指令结果
                        {
                            extflag += reqdata.sData[0].ToString("X2") + reqdata.sData[1].ToString("X2");
                        }
                        key += extflag;
                    }
                    if (UserOrderTable.ContainsKey(key))
                    {
                        string           tokens = UserOrderTable[key].ToString();
                        OrderResultModel orm    = new OrderResultModel();
                        orm.cid           = carid;
                        orm.dwOperation1  = datapag.dwOperation1;
                        orm.dwOperation2  = datapag.dwOperation2;
                        orm.dwPackageType = datapag.dwPackageType;
                        orm.ResData       = datapag;
                        orm.sysflag       = sysflag;
                        orm.resTime       = DateTime.Now;
                        orm.extflag       = extflag;
                        List <OrderResultModel> ormlist = new List <OrderResultModel>();
                        ormlist.Add(orm);
                        string[] tokenarray = tokens.Split(',');
                        foreach (string token in tokenarray)
                        {
                            //命令响应加入hash表
                            if (OrderResultTable.ContainsKey(token))
                            {
                                List <OrderResultModel> oldormlist = (List <OrderResultModel>)OrderResultTable[token];
                                oldormlist.Add(orm);
                                OrderResultTable[token] = oldormlist;
                            }
                            else
                            {
                                OrderResultTable.Add(token, ormlist);
                            }
                            //命令响应时间加入hash表
                            if (OrderAndResultTime.ContainsKey(token))
                            {
                                OrderAndResultTime[token] = DateTime.Now;
                            }
                            else
                            {
                                OrderAndResultTime.Add(token, DateTime.Now);
                            }
                            LogHelper.WriteInfo(sysflag + "接收指令执行结果:" + key);
                        }
                        UserOrderTable.Remove(key);
                    }
                }
            }
        }