/// <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)); }
/// <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); } }