/// <summary> /// Adds <see cref="DataPart"/> to transport container /// </summary> /// <param name="dataPart"></param> /// <returns></returns> public DataPart AddDataPart(DataPart dataPart) { if (dataPart == null) { throw new ArgumentNullException("dataPart"); } DataParts.Add(dataPart); return(dataPart); }
/// <summary> /// Adds <see cref="IDataContainer"/> as part of data to transport container /// </summary> /// <param name="dataContainer"></param> /// <returns></returns> public DataPart AddDataPart(IDataContainer dataContainer) { if (dataContainer == null) { throw new ArgumentNullException("dataContainer"); } var dataPart = new DataPart(dataContainer); DataParts.Add(dataPart); return(dataPart); }
/// <summary> /// Read all data parts from <see cref="DataPack"/> /// </summary> /// <param name="dataPack"></param> /// <param name="br">Binary reader</param> /// <param name="dataPartInfos">List of datapart information</param> /// <param name="stream">Stream of transport container</param> protected override void ReadDataParts(DataPack dataPack, BinaryReader br, List <DataPartInfo> dataPartInfos, Stream stream) { foreach (var dataPartInfo in dataPartInfos) { IDataContainer dataContainer; using (var filteredStream = new FilteredStream(stream, dataPartInfo.DataAddress, dataPartInfo.DataSize)) { dataContainer = new TempFileDataContainer(filteredStream); } var dataPart = new DataPart(dataContainer); if (dataPartInfo.HeadersCount > 0) { stream.Seek(dataPartInfo.HeadersAddress, SeekOrigin.Begin); using (var filter = new FilteredStream(stream, dataPartInfo.HeadersAddress, dataPartInfo.HeadersSize)) { for (ushort i = 0; i < dataPartInfo.HeadersCount; i++) { dataPart.Headers.Add(Serializer.DeserializeWithLengthPrefix <DataPair>(filter, PrefixStyle.Base128)); } } } if (dataPartInfo.PropertiesCount > 0) { stream.Seek(dataPartInfo.PropertiesAddress, SeekOrigin.Begin); using (var filter = new FilteredStream(stream, dataPartInfo.PropertiesAddress, dataPartInfo.PropertiesSize)) { for (ushort i = 0; i < dataPartInfo.PropertiesCount; i++) { dataPart.Properties.AddOrReplace(Serializer.DeserializeWithLengthPrefix <DataPair>(filter, PrefixStyle.Base128)); } } } dataPack.DataParts.Add(dataPart); } }