Exemplo n.º 1
0
        /// <summary>
        /// Encode payload data delta frame
        /// </summary>
        /// <param name="binaryEncoder"></param>
        private void EncodeMessageDataDeltaFrame(BinaryEncoder binaryEncoder)
        {
            // calculate the number of fields that will be written
            int fieldCount = DataSet.Fields.Count(f => f != null);

            // The field count is written for RadData encoding too unlike for KeyFrame message
            binaryEncoder.WriteUInt16("FieldCount", (UInt16)fieldCount);

            FieldTypeEncodingMask fieldType = (FieldTypeEncodingMask)(((byte)DataSetFlags1 & kFieldTypeUsedBits) >> 1);

            for (int i = 0; i < DataSet.Fields.Length; i++)
            {
                Field field = DataSet.Fields[i];
                if (field == null)
                {
                    continue;                // ignore null fields
                }
                // write field index
                binaryEncoder.WriteUInt16("FieldIndex", (UInt16)i);

                switch (fieldType)
                {
                case FieldTypeEncodingMask.Variant:
                    // 00 Variant type
                    binaryEncoder.WriteVariant("FieldValue", field.Value.WrappedValue);
                    break;

                case FieldTypeEncodingMask.DataValue:
                    // 10 DataValue type
                    binaryEncoder.WriteDataValue("FieldValue", field.Value);
                    break;

                case FieldTypeEncodingMask.RawData:
                    EncodeFieldAsRawData(binaryEncoder, field);
                    break;

                case FieldTypeEncodingMask.Reserved:
                    // ignore
                    break;
                }
            }
        }
Exemplo n.º 2
0
        /// <summary>
        /// Encode payload data
        /// </summary>
        /// <param name="binaryEncoder"></param>
        private void EncodeMessageDataKeyFrame(BinaryEncoder binaryEncoder)
        {
            FieldTypeEncodingMask fieldType = (FieldTypeEncodingMask)(((byte)DataSetFlags1 & kFieldTypeUsedBits) >> 1);

            switch (fieldType)
            {
            case FieldTypeEncodingMask.Variant:
                binaryEncoder.WriteUInt16("DataSetFieldCount", (UInt16)DataSet.Fields.Length);
                foreach (Field field in DataSet.Fields)
                {
                    // 00 Variant type
                    binaryEncoder.WriteVariant("Variant", field.Value.WrappedValue);
                }
                break;

            case FieldTypeEncodingMask.DataValue:
                binaryEncoder.WriteUInt16("DataSetFieldCount", (UInt16)DataSet.Fields.Length);
                foreach (Field field in DataSet.Fields)
                {
                    // 10 DataValue type
                    binaryEncoder.WriteDataValue("DataValue", field.Value);
                }
                break;

            case FieldTypeEncodingMask.RawData:
                // DataSetFieldCount is not persisted for RawData
                foreach (Field field in DataSet.Fields)
                {
                    EncodeFieldAsRawData(binaryEncoder, field);
                }
                break;

            case FieldTypeEncodingMask.Reserved:
                // ignore
                break;
            }
        }