Ejemplo n.º 1
0
        protected void Button1_Click(object sender, EventArgs e)
        {
            string strRes = "";

            TextBox1.Text = "";
            List <OrderResultModel> orms = SendOrderHander.GetOrderResults(token);

            foreach (OrderResultModel orm in orms)
            {
                if (orm == null)
                {
                    return;
                }
                if (orm.dwPackageType == 30)
                {
                    if (orm.dwOperation1 == 10)
                    {
                        MemoryStream       ms       = new MemoryStream(orm.ResData.byteContext);
                        COM_TimeResponseUp Response = ProtoBuf.Serializer.Deserialize <COM_TimeResponseUp>(ms);
                        ms.Close();
                        strRes += JsonConvert.SerializeObject(Response) + "\n";
                        //TextBox1.Text = strRes;
                    }
                    else if (orm.dwOperation1 == 33)
                    {
                        MemoryStream    ms            = new MemoryStream(orm.ResData.byteContext);
                        CTS_MediaDataUp mediaResponse = ProtoBuf.Serializer.Deserialize <CTS_MediaDataUp>(ms);
                        if (mediaResponse.nMediaType == 0)
                        {
                            MemoryStream ms3 = new MemoryStream(mediaResponse.sMediaData, 0, mediaResponse.sMediaData.Length);
                            //Image returnImage = Image.FromStream(ms3);
                            System.Drawing.Image i = Bitmap.FromStream(ms3, true);
                            string bpath           = HttpRuntime.AppDomainAppPath.ToString();
                            string path            = @"TempImage\" + "temp" + mediaResponse.dwTNO + "t" + DateTime.Now.Minute + DateTime.Now.Second + ".png";
                            i.Save(bpath + path);
                            Image1.ImageUrl = path;
                        }
                        ms.Close();
                    }
                    else if (orm.dwOperation1 == 41)
                    {
                        MemoryStream ms = new MemoryStream(orm.ResData.byteContext);
                        CTS_DriveRecordDataUpResponse Response = ProtoBuf.Serializer.Deserialize <CTS_DriveRecordDataUpResponse>(ms);
                        ms.Close();
                        MemoryStream ms2     = new MemoryStream(Response.sDataBlock);
                        object       subdata = null;
                        switch (Response.nCMD)
                        {
                        case 0x00:    //命令字0x00  采集记录仪执行标准版本
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_DrivingRecorderVersionUp>(ms2);
                            break;
                        }

                        case 0x01:    //命令字0x01  采集当前驾驶人信息(机动车驾驶证号码)
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_DriverCodeDrivingLicUp>(ms2);
                            break;
                        }

                        case 0x02:    //命令字0x02  采集记录仪的实时时钟
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_CurrentTimeDataUp>(ms2);
                            break;
                        }

                        case 0x03:    //命令字0x03  采集累计行程里程
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_CarSumMilesUp>(ms2);
                            break;
                        }

                        case 0x04:    //命令字0x04  采集记录仪脉冲系数
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_CarCharacterQuotientUp>(ms2);
                            break;
                        }

                        case 0x05:    //命令字0x05  采集车辆信息(车辆识别代号、机动车号牌号码、机动车号牌分类)
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_CarRecorderVinPlateAndTypeUp>(ms2);
                            break;
                        }

                        case 0x06:    //命令字0x06  采集记录仪状态信号配置信息
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_DrivingRecorderStatusConfigUp>(ms2);
                            break;
                        }

                        case 0x07:    //命令字0x07  采集记录仪唯一性编号
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_DrivingRecorderIdentifierUp>(ms2);
                            break;
                        }

                        case 0x08:    //命令字0x08  采集指定的行驶速度记录
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_DrivingRecorderSpeedRecordUp>(ms2);
                            break;
                        }

                        case 0x09:    //命令字0x09  采集指定的位置信息记录
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_DrivingRecorderPositionRecordUp>(ms2);
                            break;
                        }

                        case 0x10:    //命令字0x00  采集记录仪执行标准版本
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_AccidentDoubtRecordUp>(ms2);
                            break;
                        }

                        case 0x11:    //命令字0x00  采集记录仪执行标准版本
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_OverTimeDrivedRecordUp>(ms2);
                            break;
                        }

                        case 0x12:    //命令字0x00  采集记录仪执行标准版本
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_DriverLoginRecordUp>(ms2);
                            break;
                        }

                        case 0x13:    //命令字0x00  采集记录仪执行标准版本
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_PowerSupplyRecordUp>(ms2);
                            break;
                        }

                        case 0x14:    //命令字0x00  采集记录仪执行标准版本
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_ParamModifyRecordUp>(ms2);
                            break;
                        }

                        case 0x15:    //命令字0x00  采集记录仪执行标准版本
                        {
                            subdata = ProtoBuf.Serializer.Deserialize <CTS_SpeedStatusLogUp>(ms2);
                            break;
                        }

                        default:
                        {
                            break;
                        }
                        }


                        strRes += JsonConvert.SerializeObject(subdata);
                    }
                }
            }
            TextBox1.Text = strRes;
        }
Ejemplo n.º 2
0
        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);
                    }
                }
            }
        }