예제 #1
0
        public bool Parse(byte[] d)
        {
            int readlength = 0;

            do
            {
                BSSObject bssObject = new BSSObject();
                int       n         = bssObject.Parse(d, readlength);
                readlength += n + 10;
                ALLData.Enqueue(bssObject);
            } while (readlength != d.Length);
            if (readlength != d.Length)
            {
                return(false);
            }
            return(true);
        }
예제 #2
0
파일: NetEngine.cs 프로젝트: BoonieBear/BSS
        private void ParseNetworkPacket(byte[] ReadBuffer, int PacketLength)
        {
            byte[] myReadBuffer = new byte[PacketLength + 8];
            Buffer.BlockCopy(ReadBuffer, 0, myReadBuffer, 0, PacketLength + 8);
            switch (BitConverter.ToUInt16(myReadBuffer, 0))
            {
            case (int)ComID.Ans:
                if (ACPacketHandle != null)
                {
                    ACPacketHandle.Set();
                }
                Ans = BitConverter.ToInt32(myReadBuffer, 8);
                if (Command.Ans.ContainsKey(Ans))
                {
                    MainForm.mf.CmdWindow.DisplayAns(Command.Ans[Ans].ToString());
                }
                else
                {
                    MainForm.mf.CmdWindow.DisplayAns("返回未知ID错误码");
                }
                break;

            case (int)ComID.HighParaAns:
                if (ACPacketHandle != null)
                {
                    ACPacketHandle.Set();
                }
                string str = ParsePara(myReadBuffer);
                byte[] b   = new byte[56];
                Buffer.BlockCopy(myReadBuffer, 8, b, 0, 56);
                MainForm.mf.para.Highpara.Parse(b);
                MainForm.mf.CmdWindow.DisplayAns(str);
                break;

            case (int)ComID.LowParaAns:
                if (ACPacketHandle != null)
                {
                    ACPacketHandle.Set();
                }
                str = ParsePara(myReadBuffer);
                b   = new byte[56];
                Buffer.BlockCopy(myReadBuffer, 8, b, 0, 56);
                MainForm.mf.para.Lowpara.Parse(b);
                MainForm.mf.CmdWindow.DisplayAns(str);
                break;

            case (int)ComID.BSSdata:
                if (!hasRecv)
                {
                    BssFile.SetPath(new DirectoryInfo(MyExecPath));

                    XtfFile.SetPath(new DirectoryInfo(MyExecPath));
                    hasRecv = true;
                }
                BssFile.Write(myReadBuffer);
                BSSResultData resultData = new BSSResultData();

                if (ParseBssData(myReadBuffer, out resultData))
                {
                    BSSObject        data     = null;
                    List <BSSObject> datalist = new List <BSSObject>();
                    str = "";
                    while (resultData.Data.ALLData.Count > 0)
                    {
                        data = resultData.Data.ALLData.Dequeue();
                        str += "收到侧扫数据,长度=" + data.DataBytes.ToString() + "字节,类型:" + Enum.GetName(typeof(ObjectID), data.ID) + "\n";
                        MainForm.mf.DisplayRTBSS(data);
                        datalist.Add(data);
                    }
                    //save to xtf file
                    if (Configuration.bSaveXTF)
                    {
                        SaveXTF(datalist, resultData.Parameter);
                    }
                    datalist.Clear();
                    var highrange = resultData.Parameter.Range;   //
                    var Lowrange  = resultData.Parameter.Range;   //
                    MainForm.mf.DisplayRTRange(highrange.ToString(), Lowrange.ToString());
                    MainForm.mf.CmdWindow.DisplayAns(str);
                }
                break;

            case (int)ComID.SensorData:
                BssSensorData sensorData = new BssSensorData();
                if (ParseSensorData(myReadBuffer, out sensorData))
                {
                    str = "收到传感器数据,长度=" + myReadBuffer.Length + "字节";
                    MainForm.mf.CmdWindow.DisplayAns(str);
                    //MainForm.mf.DisplayRTBSS(resultData);
                }
                break;

            default:
                break;
            }
        }
예제 #3
0
파일: Command.cs 프로젝트: BoonieBear/BSS
 public bool Parse(byte[] d)
 {
     
     int readlength = 0;
     do
     {
         BSSObject bssObject = new BSSObject();
         int n = bssObject.Parse(d, readlength);
         readlength += n+10;
         ALLData.Enqueue(bssObject);
     } while (readlength != d.Length);
     if(readlength!=d.Length)
         return false;
     return true;
 }