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; }
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); } } } }