void ParseTagDataol(object state) { byte[] recvbuf = new byte[1500]; TcpClient client = null; NetworkStream stream = null; UInt16 msgver = 0; byte msgtype = 0; UInt32 serialnum = 0; try { client = (TcpClient)state; stream = client.GetStream(); stream.ReadTimeout = 2000; while (true) { int pos = 0; if (!isRecvTagsol) { break; } client.Client.Blocking = true; // Console.WriteLine("before ol getmsg"); if (getmsg(stream, recvbuf, 9) < 0) { // return; if (!isRecvTagsol) { break; } else { Debug.WriteLine("ParseTagDataol ffffffffffffffffffffffffffff"); continue; } } // Console.WriteLine("after ol getmsg"); msgver = (UInt16)((recvbuf[pos] << 8) | recvbuf[1 + pos]); pos += 2; msgtype = recvbuf[pos++]; serialnum = (UInt32)((recvbuf[pos] << 24) | (recvbuf[pos + 1] << 16) | (recvbuf[pos + 2] << 8) | recvbuf[pos + 3]); pos += 4; // Debug.WriteLine("serialnum:" + serialnum.ToString()); int datalen = (recvbuf[pos] << 8) | recvbuf[1 + pos]; pos += 2; // Debug.WriteLine("datalen:" + datalen.ToString()); if (getmsg(stream, recvbuf, datalen) < 0) { return; } // // for (int n = 0; n < datalen; ++n) // Debug.Write(" " + recvbuf[n].ToString("X2")); // Debug.WriteLine(""); // pos = 0; int tagcnt = recvbuf[pos++]; UploadTag[] tags = new UploadTag[tagcnt]; for (int i = 0; i < tagcnt; ++i) { tags[i] = new UploadTag(); int epclen = recvbuf[pos++]; // Debug.WriteLine("epclen:" + epclen.ToString()); byte[] epc = new byte[epclen]; Array.Copy(recvbuf, pos, epc, 0, epclen); tags[i].epcstr = ByteFormat.ToHex(epc); // Debug.WriteLine("epcstr:" + tags[i].epcstr); pos += epclen; int banklen = recvbuf[pos++]; // Debug.WriteLine("banklen:" + banklen.ToString()); if (banklen > 0) { byte[] bank = new byte[banklen]; Array.Copy(recvbuf, pos, bank, 0, banklen); pos += banklen; tags[i].bankstr = ByteFormat.ToHex(bank); // Debug.WriteLine("bankstr:" + tags[i].bankstr); } tags[i].ant = recvbuf[pos++]; // Debug.WriteLine("ant:" + tags[i].ant.ToString()); tags[i].readcnt = recvbuf[pos++]; // Debug.WriteLine("readcnt:" + tags[i].readcnt.ToString()); tags[i].potl = recvbuf[pos++]; // Debug.WriteLine("potl:" + tags[i].potl.ToString()); tags[i].rssi = (sbyte)recvbuf[pos++]; // Debug.WriteLine("rssi:" + tags[i].rssi.ToString()); #if TimeStampFormat_Short tags[i].tsstr = ParseShortTimeStamp(recvbuf, pos); pos += 5; // Console.WriteLine("tsstr:" + tags[i].tsstr); #else tags[i].tsstr = Encoding.ASCII.GetString(recvbuf, pos, 17); // Debug.WriteLine("tsstr:" + tags[i].tsstr); pos += 17; #endif } int readernamelen = recvbuf[pos++]; // Debug.WriteLine("readernamelen:" + readernamelen.ToString()); // Debug.WriteLine("readername:" + // Encoding.ASCII.GetString(recvbuf, pos, readernamelen)); pos += readernamelen; #if Xdiot_App string tailtm = ParseShortTimeStamp(recvbuf, pos); // Console.WriteLine("tag oltailtm:" + tailtm); #endif if (msgtype == 1) { this.BeginInvoke(new UpdateUi(addrecord), new object[] { tags }); } else if (msgtype == 2) { this.BeginInvoke(new UpdateUi(addrecord_offline), new object[] { tags }); } #if Xdiot_App else if (msgtype == 3) { foreach (UploadTag tg in tags) { tg.ant = 50 + tg.ant; } this.BeginInvoke(new UpdateUi(addrecord), new object[] { tags }); } else if (msgtype == 4) { foreach (UploadTag tg in tags) { tg.ant = 50 + tg.ant; } this.BeginInvoke(new UpdateUi(addrecord_offline), new object[] { tags }); } else if (msgtype == 5) { foreach (UploadTag tg in tags) { tg.ant = 60 + tg.ant; } this.BeginInvoke(new UpdateUi(addrecord), new object[] { tags }); } else if (msgtype == 6) { foreach (UploadTag tg in tags) { tg.ant = 60 + tg.ant; } this.BeginInvoke(new UpdateUi(addrecord_offline), new object[] { tags }); } #endif // this.BeginInvoke(new UpdateUiThreadCnt(updateThreadcnt), new object[] { nThreadRun }); } ; } catch (System.Exception exx) { Debug.WriteLine("ParseTagDataol aaaaaaaaaa exception:" + exx.ToString()); if (client != null) { client.Close(); } if (stream != null) { stream.Close(); } } Debug.WriteLine("ParseTagDataol bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"); if (client != null) { client.Close(); } if (stream != null) { stream.Close(); } }
// Dictionary<String, int> dicepcs = new Dictionary<String, int>(); void ParseTagData(object state) { byte[] recvbuf = new byte[1500]; TcpClient client = null; NetworkStream stream = null; UInt16 msgver = 0; byte msgtype = 0; UInt32 serialnum = 0; try { client = (TcpClient)state; stream = client.GetStream(); stream.ReadTimeout = 2000; while (true) { int pos = 0; if (!isRecvTags) { break; } client.Client.Blocking = true; int recret = getmsg(stream, recvbuf, 9); if (recret < 0) { if (!isRecvTags) { break; } else { Debug.WriteLine("ParseTagData ffffffffffffffffffffffffffff"); continue; } } msgver = (UInt16)((recvbuf[pos] << 8) | recvbuf[1 + pos]); pos += 2; msgtype = recvbuf[pos++]; serialnum = (UInt32)((recvbuf[pos] << 24) | (recvbuf[pos + 1] << 16) | (recvbuf[pos + 2] << 8) | recvbuf[pos + 3]); pos += 4; // Debug.WriteLine("serialnum:" + serialnum.ToString()); int datalen = (recvbuf[pos] << 8) | recvbuf[1 + pos]; pos += 2; //Debug.WriteLine("datalen:" + datalen.ToString()); #if SaveTagLog smrawwter.WriteLine("----------------------------------------------------------------- 接收时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss fff")); smwter.WriteLine("----------------------------------------------------------------- 接收时间:" + DateTime.Now.ToString("yyyy-MM-dd hh:mm:ss fff")); string rawdata = ""; for (int n = 0; n < 9; ++n) { rawdata += " " + recvbuf[n].ToString("X2"); } #endif recret = getmsg(stream, recvbuf, datalen); if (recret < 0) { return; } #if SaveTagLog for (int d = 0; d < datalen; ++d) { rawdata += " " + recvbuf[d].ToString("X2"); } smrawwter.WriteLine(rawdata); string msginfostr = "消息版本:"; #endif #if UploadMsg_Notag if (msgtype == 21) { // Console.WriteLine("notag -----------------"); pos = 0; int rdrnamelen = recvbuf[pos++]; pos += rdrnamelen; string tailtm = ParseShortTimeStamp(recvbuf, pos); Console.WriteLine("notag rttailtm:" + tailtm); #if SaveTagLog msginfostr += msgver.ToString(); msginfostr += " 序列号:"; msginfostr += serialnum.ToString(); msginfostr += " 消息类型:"; msginfostr += msgtype.ToString(); msginfostr += " 消息时间戳:"; msginfostr += tailtm; smwter.WriteLine(msginfostr); #endif continue; } #endif #if UploadMsg_ReaderAlarm if (msgtype == 22) { pos = 0; UInt16 ecode = (UInt16)((recvbuf[pos] << 8) | recvbuf[pos + 1]); // Console.WriteLine("ecode:" + ecode.ToString()); pos += 2; byte[] einfo = new byte[8]; Array.Copy(recvbuf, 2, einfo, 0, 8); pos += 8; // Console.WriteLine("einfo:"); // for (int d = 0; d < 8; ++d) // Console.Write(" " + einfo[d].ToString()); // Console.WriteLine(""); int rdrnamelen = recvbuf[pos++]; pos += rdrnamelen; string tailtm3 = ParseShortTimeStamp(recvbuf, pos); // Console.WriteLine("alarm rttailtm:" + tailtm3); continue; } #endif // // for (int n = 0; n < datalen; ++n) // Debug.Write(" " + recvbuf[n].ToString("X2")); // Debug.WriteLine(""); // pos = 0; int tagcnt = recvbuf[pos++]; UploadTag[] tags = new UploadTag[tagcnt]; // dicepcs.Clear(); #if SaveTagLog msginfostr += msgver.ToString(); msginfostr += " 序列号:"; msginfostr += serialnum.ToString(); msginfostr += " 消息类型:"; msginfostr += msgtype.ToString(); string taginfostr = ""; #endif for (int i = 0; i < tagcnt; ++i) { tags[i] = new UploadTag(); int epclen = recvbuf[pos++]; Debug.WriteLine("epclen:" + epclen.ToString()); byte[] epc = new byte[epclen]; Array.Copy(recvbuf, pos, epc, 0, epclen); tags[i].epcstr = ByteFormat.ToHex(epc); // if (dicepcs.ContainsKey(tags[i].epcstr)) // MessageBox.Show("发现重复标签"); // else // { // dicepcs.Add(tags[i].epcstr, 1); // } Debug.WriteLine("epcstr:" + tags[i].epcstr); pos += epclen; int banklen = recvbuf[pos++]; Debug.WriteLine("banklen:" + banklen.ToString()); if (banklen > 0) { byte[] bank = new byte[banklen]; Array.Copy(recvbuf, pos, bank, 0, banklen); pos += banklen; tags[i].bankstr = ByteFormat.ToHex(bank); Debug.WriteLine("bankstr:" + tags[i].bankstr); } tags[i].ant = recvbuf[pos++]; tags[i].readcnt = recvbuf[pos++]; Debug.WriteLine("readcnt:" + tags[i].readcnt.ToString()); tags[i].potl = recvbuf[pos++]; Debug.WriteLine("potl:" + tags[i].potl.ToString()); tags[i].rssi = (sbyte)recvbuf[pos++]; Debug.WriteLine("rssi:" + tags[i].rssi.ToString()); #if TimeStampFormat_Short tags[i].tsstr = ParseShortTimeStamp(recvbuf, pos); pos += 5; // Console.WriteLine("tsstr:" + tags[i].tsstr); #else tags[i].tsstr = Encoding.ASCII.GetString(recvbuf, pos, 17); // Debug.WriteLine("tsstr:" + tags[i].tsstr); pos += 17; #endif #if SaveTagLog taginfostr += tags[i].epcstr; taginfostr += ","; taginfostr += tags[i].ant.ToString(); taginfostr += ","; taginfostr += tags[i].readcnt.ToString(); taginfostr += ","; taginfostr += tags[i].rssi.ToString(); taginfostr += ","; taginfostr += tags[i].potl.ToString(); taginfostr += ","; taginfostr += tags[i].tsstr; taginfostr += "|"; #endif } int readernamelen = recvbuf[pos++]; // Debug.WriteLine("readernamelen:" + readernamelen.ToString()); // Debug.WriteLine("readername:" + // Encoding.ASCII.GetString(recvbuf, pos, readernamelen)); pos += readernamelen; #if Xdiot_App string tailtm2 = ParseShortTimeStamp(recvbuf, pos); // Console.WriteLine("tag rttailtm:" + tailtm2); #if SaveTagLog msginfostr += " 消息时间戳:"; msginfostr += tailtm2; smwter.WriteLine(msginfostr); if (tagcnt > 0) { smwter.WriteLine(taginfostr); } #endif #endif if (msgtype == 1) { this.BeginInvoke(new UpdateUi(addrecord), new object[] { tags }); } else if (msgtype == 2) { this.BeginInvoke(new UpdateUi(addrecord_offline), new object[] { tags }); } #if Xdiot_App else if (msgtype == 3) { foreach (UploadTag tg in tags) { tg.ant = 50 + tg.ant; } this.BeginInvoke(new UpdateUi(addrecord), new object[] { tags }); } else if (msgtype == 4) { foreach (UploadTag tg in tags) { tg.ant = 50 + tg.ant; } this.BeginInvoke(new UpdateUi(addrecord_offline), new object[] { tags }); } else if (msgtype == 5) { foreach (UploadTag tg in tags) { tg.ant = 60 + tg.ant; } this.BeginInvoke(new UpdateUi(addrecord), new object[] { tags }); } else if (msgtype == 6) { foreach (UploadTag tg in tags) { tg.ant = 60 + tg.ant; } this.BeginInvoke(new UpdateUi(addrecord_offline), new object[] { tags }); } #endif // this.BeginInvoke(new UpdateUiThreadCnt(updateThreadcnt), new object[] { nThreadRun }); } ; } catch (System.Exception exx) { Debug.WriteLine("ParseTagData aaaaaaaaaaaaa exception:" + exx.ToString()); if (client != null) { client.Close(); } if (stream != null) { stream.Close(); } } Debug.WriteLine("ParseTagData bbbbbbbbbbbbbbbbbbbbbbbbbbbbbb"); if (client != null) { client.Close(); } if (stream != null) { stream.Close(); } }