Beispiel #1
0
        private void InitialiseFromStream(Stream str)
        {
            protocolVersion = MagicNumberToProtocolVersion((short)str.ReadByte());

            if (protocolVersion == WaveProtocolVersion.Version4)
            {
                messageSize = str.ReadInteger24();
            }
            else
            {
                messageSize = str.ReadShort();
            }

            applicationID = (byte)str.ReadByte();
            messageID     = (short)str.ReadByte();

            short numberOfFields       = str.ReadShort();
            byte  extras               = 0;
            int   extendedHeaderLength = 0;
            bool  isCompressed         = false;

            if (protocolVersion == WaveProtocolVersion.Version4)
            {
                extras = (byte)str.ReadByte();
            }

            isCompressed         = ((extras & CompressedDataFlag) == CompressedDataFlag);
            extendedHeaderLength = extras >> 4;

            if (extendedHeaderLength > 0)
            {
                str.Seek(extendedHeaderLength, SeekOrigin.Current);
            }

            if (isCompressed)
            {
                // get size of data when uncompressed
                int uncompressedSize = str.ReadInteger24();

                // calculate size of compressed data
                int compressedSize = messageSize;

                if (protocolVersion == WaveProtocolVersion.Version4)
                {
                    compressedSize -= HeaderSizeV4;
                }
                else
                {
                    compressedSize -= HeaderSizeV3;
                }

                compressedSize -= extendedHeaderLength;
                compressedSize -= 3; // size of uncompressedSize

                // uncompress
                byte[] compressedData = str.ReadBytes(compressedSize);

                if (compressedData != null)
                {
                    byte[] uncompressedMessage = CompressionHelper.DeflateBuffer(compressedData);

                    using (MemoryStream mem = new MemoryStream(uncompressedMessage))
                        rootList = new FieldList(mem, numberOfFields);
                }
            }
            else
            {
                rootList = new FieldList(str, numberOfFields);
            }
        }
Beispiel #2
0
 public void AddFieldList(FieldList list)
 {
     rootList.Add(list);
 }
Beispiel #3
0
 public WaveMessage()
 {
     rootList = new FieldList();
 }
Beispiel #4
0
        private void ReadFromStream(Stream str, short numberOfFields)
        {
            if (numberOfFields <= 0)
            {
                return;
            }

            for (int i = 0; i < numberOfFields; i++)
            {
                // start with the field type
                int       b1    = str.ReadByte();
                FieldType fType = (FieldType)(b1 >> 4);
                short     wID   = (short)((b1 & 0x000F) << 8);
                wID |= (short)str.ReadByte();

                switch (fType)
                {
                case FieldType.Int16:
                    fields.Add(new Int16Field(wID, str));
                    break;

                case FieldType.Int32:
                    fields.Add(new Int32Field(wID, str));
                    break;

                case FieldType.Bool:
                    fields.Add(new BooleanField(wID, str));
                    break;

                case FieldType.Double:
                    fields.Add(new DoubleField(wID, str));
                    break;

                case FieldType.Byte:
                    fields.Add(new ByteField(wID, str));
                    break;

                case FieldType.Binary:
                    fields.Add(new BinaryField(wID, str));
                    break;

                case FieldType.DateTime:
                    fields.Add(new DateTimeField(wID, str));
                    break;

                case FieldType.LongBinary:
                    fields.Add(new LongBinaryField(wID, str));
                    break;

                case FieldType.String:
                    fields.Add(new StringField(wID, str));
                    break;

                case FieldType.FieldList:
                    fields.Add(FieldList.CreateField(wID, str, str.ReadShort()));
                    break;

                default:
                    DebugHelper.Out("Unsupported field type: {0}", (int)fType);
                    break;
                }
            }
        }