public override ParserResult Parse()
        {
            ParserResult result = null;

            if (data.Length > MinSizeDataPacket)
            {
                var startByteList  = new TrackerTypeData.TypePacketData[] { TrackerTypeData.TypePacketData.Answer, TrackerTypeData.TypePacketData.AsyncData, TrackerTypeData.TypePacketData.Request };
                var startByteIndex = 0;
                while (startByteIndex < startByteList.Length)
                {
                    var startByte = Array.IndexOf(data, (byte)startByteList[startByteIndex]);
                    if (startByte != -1)
                    {
                        var    lenWholePacket = BitConverter.ToUInt16(data, (int)TrackerTypeData.PacketField.PacketLenByteL);
                        byte[] crcArray       = new byte[lenWholePacket - 2];
                        if (data.Length >= crcArray.Length)
                        {
                            Array.Copy(data, 0, crcArray, 0, crcArray.Length);
                            if (CrcCalc.Crc16(crcArray) == BitConverter.ToUInt16(data, lenWholePacket - 2))
                            {
                                var packet      = (TrackerTypeData.TypePacketData)(int) data[(int)TrackerTypeData.PacketField.PacketHeaderIndex];
                                var typeMessage = (TrackerTypeData.TypeMessage)data[(int)TrackerTypeData.PacketField.PacketTypeMessageIndex];
                                var paramCount  = data[(int)TrackerTypeData.PacketField.PacketParamCountIndex];
                                var bodyData    = ParseField(data, (int)TrackerTypeData.PacketField.PacketStartDataInPacketIndex, paramCount);
                                result = new ParserResult(packet, bodyData, typeMessage);
                            }
                            else
                            {
                                return(null);
                            }
                        }
                    }
                    startByteIndex += 1;
                }
            }
            return(result);
        }
Exemple #2
0
 public ParserResult(TrackerTypeData.TypePacketData _type, List <DataItemParam> _data, TypeMessage _typeMessage)
 {
     type        = _type;
     data        = _data;
     typeMessage = _typeMessage;
 }