コード例 #1
0
        /// <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);
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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);
            }
        }