Esempio n. 1
0
        /// <summary>
        ///     Encodes just the DataSetMetaData message to the given Stream.
        ///     NetworkMessage Header and DiscoveryResponse are not encoded.
        /// </summary>
        /// <param name="outputStream"></param>
        public void EncodeChunk(Stream outputStream)
        {
            DiscoveryResponseHeader.Encode(outputStream);

            // DataSetWriterID
            BaseType.WriteToStream(outputStream, BitConverter.GetBytes(DataSetWriterID));
            EncodeDataTypeSchemaHeaderStructure(outputStream);

            // Name
            Name.Encode(outputStream);

            // Description
            Description.Encode(outputStream);

            // Fields
            int fieldLength = -1;

            if (FieldMetaDataList != null)
            {
                fieldLength = FieldMetaDataList.Count;
            }
            BaseType.WriteToStream(outputStream, BitConverter.GetBytes(fieldLength));
            for (int i = 0; i < fieldLength; i++)
            {
                // ReSharper disable once PossibleNullReferenceException
                FieldMetaData field = FieldMetaDataList[i] ?? new FieldMetaData(Options);
                field.Encode(outputStream);
            }

            // DataSet Class ID
            BaseType.WriteToStream(outputStream, DataSetClassID.ToByteArray());

            // Version
            ConfigurationVersion.Encode(outputStream);

            // Status Code
            BaseType.WriteToStream(outputStream, BitConverter.GetBytes(StatusCode));
        }
Esempio n. 2
0
        /// <summary>
        ///     Encodes just the common part of the DataSet Message (e.g. Flags 1 & Flags 2,
        ///     Configuration Version and Message Sequence Number.
        /// </summary>
        /// <param name="outputStream"></param>
        public virtual void EncodeChunk(Stream outputStream)
        {
            // 3. DataSetFlags1
            outputStream.WriteByte(Flags1.RawValue);

            // 4. DataSetFlags2
            if (Flags1.Flags1.HasFlag(DataSetFlags1Enum.DataSetFlags2Enabled))
            {
                outputStream.WriteByte(Flags2.RawValue);
            }

            // 5. Message Sequence Number
            if (Flags1.Flags1.HasFlag(DataSetFlags1Enum.DataSetSequenceNumberEnabled))
            {
                BaseType.WriteToStream(outputStream, BitConverter.GetBytes(DataSetMessageSequenceNumber));
            }

            // evaluate the following options only if DataSetFlags2 field is provided
            if (Flags1.Flags1.HasFlag(DataSetFlags1Enum.DataSetFlags2Enabled))
            {
                // Timestamp
                if (Flags2.Flags2.HasFlag(DataSetFlags2Enum.TimeStampEnabled))
                {
                    BaseType.WriteToStream(outputStream, BitConverter.GetBytes(Convert.ToInt64(Timestamp.ToFileTimeUtc())));
                }
            }

            // 6. Configuration Version
            if (Flags1.Flags1.HasFlag(DataSetFlags1Enum.ConfigurationVersionMajorVersion) ||
                Flags1.Flags1.HasFlag(DataSetFlags1Enum.ConfigurationVersionMinorVersion))
            {
                // we always send both, minor and major version; ensure that both
                // bits are set in DataSetFlags1
                ConfigurationVersion.Encode(outputStream);
            }
        }