示例#1
0
        internal static async Task ApplyPpcParseJsonArray <TJ, TC>(this PullFuncStream data,
                                                                   IConsumer <TC> consumer,
                                                                   IDataAdapter <TJ, TC> adapter,
                                                                   JsonSerializer serializer,
                                                                   CancellationToken token,
                                                                   Encoding enc,
                                                                   bool detectEncodingFromBom,
                                                                   int bufferSize,
                                                                   BlockingCollection <TJ> bc,
                                                                   CancellationTokenSource localCts,
                                                                   int ppcBuffSize)
        {
            var errList         = new List <Exception>();
            var ppcProducerTask = GetParseJsonArrayProducerTask(data, serializer, token, enc, detectEncodingFromBom,
                                                                bufferSize, bc, localCts);

            await RunPpcJsonArray(bc, localCts, consumer, adapter, token, ppcBuffSize, errList)
            .ConfigureAwait(false);

            try
            {
                await ppcProducerTask.ConfigureAwait(false);
            }
            catch (Exception e)
            {
                errList.Add(e);
            }

            if (errList.Count > 0)
            {
                throw new AggregateException("Error during JSON PULL streaming.", errList);
            }
        }
示例#2
0
 public void Properties_Are_Simple_Accessors()
 {
     using (var mem = new MemoryStream(new byte[0]))
     {
         var _ = new PullFuncStream(mem, true);
         Assert.True(_.Dispose);
         Assert.True(ReferenceEquals(_.Readable, mem));
     }
 }
示例#3
0
        public void Ctor_Throws_Error_When_Stream_Is_Not_Readable()
        {
            var mem = Substitute.For <Stream>();

            mem.CanRead.Returns(false);
            Assert.True(Assert.Throws <DdnDfException>(() =>
            {
                var _ = new PullFuncStream(mem, true);
            }).ErrorCode == DdnDfErrorCode.Unspecified);
        }
示例#4
0
 internal static Task GetParseJsonArrayProducerTask <TJ>(PullFuncStream data,
                                                         JsonSerializer serializer,
                                                         CancellationToken token,
                                                         Encoding enc,
                                                         bool detectEncodingFromBom,
                                                         int bufferSize,
                                                         BlockingCollection <TJ> bc,
                                                         CancellationTokenSource localCts)
 {
     return(Task.Run(() => data.Readable.FromJsonArrayParallely(bc, serializer, token,
                                                                localCts, enc, bufferSize, data.Dispose, true, true, detectEncodingFromBom), CancellationToken.None));
 }
示例#5
0
 internal static async Task ApplyPpcParseJsonArray <TJ, TC>(this PullFuncStream data,
                                                            IConsumer <TC> consumer,
                                                            IDataAdapter <TJ, TC> adapter,
                                                            JsonSerializer serializer,
                                                            CancellationToken token,
                                                            Encoding enc,
                                                            bool detectEncodingFromBom,
                                                            int bufferSize,
                                                            int ppcBuffSize)
 {
     using var bc          = ConcurrentBuffer.CreateBuffer <TJ>(ConcurrentBuffer.MinSize);
     using var localCts    = new CancellationTokenSource();
     using var combinedCts = CancellationTokenSource.CreateLinkedTokenSource(token, localCts.Token);
     await data.ApplyPpcParseJsonArray(consumer, adapter, serializer, combinedCts.Token, enc,
                                       detectEncodingFromBom, bufferSize, bc, localCts, ppcBuffSize).ConfigureAwait(false);
 }
示例#6
0
 internal static PullFuncStream ApplyByteCount(this PullFuncStream data, ByteCountStream bcs)
 {
     bcs.ResetWith(data.Readable, data.Dispose);
     return(new PullFuncStream(bcs, true));
 }
示例#7
0
 private static PullFuncStream ApplyTransform(this PullFuncStream data, ICryptoTransform ct)
 {
     return(new PullFuncStream(data.Readable.CreateCryptoStream(ct, CryptoStreamMode.Read, data.Dispose), true));
 }
示例#8
0
 private static PullFuncStream ApplyDecompression(this PullFuncStream data, bool gzip)
 {
     return(new PullFuncStream(data.Readable.CreateDecompressionStream(gzip, data.Dispose), true));
 }