예제 #1
0
        public override void ProcessCapturesInternal(IEnumerable <FileInfo> captureFiles)
        {
            this.CaptureProcessorBlock = this.CaptureProcessorBlockFactory.Create();


            var l3L4ConversationTracker = this.L3L4ConversationTrackerBlockFactory.Create();

            this.CaptureProcessorBlock.LinkTo(l3L4ConversationTracker, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });

            var l7ConversationTrackerBlock = this.L7ConversationTrackerBlockFactory.Create();

            l3L4ConversationTracker.LinkTo <PmFrameBase>(l7ConversationTrackerBlock);
            l3L4ConversationTracker.LinkTo <L4ConversationExtended>(l7ConversationTrackerBlock);

            l3L4ConversationTracker.Completion.ContinueWith(t =>
            {
                if (t.IsFaulted)
                {
                    ((IDataflowBlock)l7ConversationTrackerBlock).Fault(t.Exception);
                }
                else
                {
                    l7ConversationTrackerBlock.Complete();
                }
            });


            foreach (var captureFile in captureFiles)
            {
                this.CaptureProcessorBlock.SendAsync(captureFile).Wait();
            }
            this.CaptureProcessorBlock.Complete();
        }
        public override void ProcessCapturesInternal(IEnumerable <FileInfo> captureFiles)
        {
            this.CaptureProcessorBlock = this.CaptureProcessorBlockFactory.Create();
            Task storeCapturesAwait;
            Task storeL3Await;
            Task storeL3StatisticsAwait;
            Task storeL4Await;
            Task storeL4StatisticsAwait;
            Task storeL7Await;
            Task storeL7StatisticsAwait;
            Task storeFramesAwait;
            Task storeL7PdusAwait;
            Task pmCaptureL3ConversationAwait;
            Task pmCaptureL4ConversationAwait;
            Task pmCaptureL7ConversationAwait;
            var  storeCapturesBlock                = this.CreateStoreActionBlock <PmCaptureBase>(out storeCapturesAwait);
            var  storeL3ConversationBlock          = this.CreateStoreActionBlock <L3Conversation>(out storeL3Await);
            var  storeL3StatisticsBlock            = this.CreateStoreActionBlock <L3ConversationStatistics>(out storeL3StatisticsAwait);
            var  storeL4ConversationBlock          = this.CreateStoreActionBlock <L4Conversation>(out storeL4Await);
            var  storeL4StatisticsBlock            = this.CreateStoreActionBlock <L4ConversationStatistics>(out storeL4StatisticsAwait);
            var  storeL7ConversationBlock          = this.CreateStoreActionBlock <L7Conversation>(out storeL7Await);
            var  storeL7StatisticsBlock            = this.CreateStoreActionBlock <L7ConversationStatistics>(out storeL7StatisticsAwait);
            var  storeFramesBlock                  = this.CreateStoreActionBlock <PmFrameBase>(out storeFramesAwait);
            var  storeL7PdusBlock                  = this.CreateStoreActionBlock <L7PDU>(out storeL7PdusAwait);
            var  storePmCaptureL3ConversationBlock = this.CreateStoreToJunctionActionBlock <PmCaptureL3Conversation>(out pmCaptureL3ConversationAwait);
            var  storePmCaptureL4ConversationBlock = this.CreateStoreToJunctionActionBlock <PmCaptureL4Conversation>(out pmCaptureL4ConversationAwait);
            var  storePmCaptureL7ConversationBlock = this.CreateStoreToJunctionActionBlock <PmCaptureL7Conversation>(out pmCaptureL7ConversationAwait);

            this.CaptureProcessorBlock.LinkTo(storeCapturesBlock, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });

            var l3L4ConversationTracker = this.L3L4ConversationTrackerBlockFactory.Create();

            this.CaptureProcessorBlock.LinkTo(l3L4ConversationTracker, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });
            l3L4ConversationTracker.LinkTo(storeL3ConversationBlock, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });
            l3L4ConversationTracker.LinkTo(storePmCaptureL3ConversationBlock, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });
            l3L4ConversationTracker.LinkTo(storeL3StatisticsBlock, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });
            l3L4ConversationTracker.LinkTo(storePmCaptureL4ConversationBlock, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });

            var l7ConversationTrackerBlock = this.L7ConversationTrackerBlockFactory.Create();

            l3L4ConversationTracker.LinkTo <PmFrameBase>(l7ConversationTrackerBlock);
            l3L4ConversationTracker.LinkTo(storeL4StatisticsBlock, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });
            l3L4ConversationTracker.LinkTo <L4ConversationExtended>(l7ConversationTrackerBlock);

            l3L4ConversationTracker.Completion.ContinueWith(t =>
            {
                if (t.IsFaulted)
                {
                    ((IDataflowBlock)l7ConversationTrackerBlock).Fault(t.Exception);
                }
                else
                {
                    l7ConversationTrackerBlock.Complete();
                }
            });

            l7ConversationTrackerBlock.LinkTo(storeFramesBlock, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });
            l7ConversationTrackerBlock.LinkTo(storeL7ConversationBlock, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });
            l7ConversationTrackerBlock.LinkTo(storeL7StatisticsBlock, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });
            l7ConversationTrackerBlock.LinkTo(storeL4ConversationBlock, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });
            l7ConversationTrackerBlock.LinkTo(storeL7PdusBlock, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });
            l7ConversationTrackerBlock.LinkTo(storePmCaptureL7ConversationBlock, new DataflowLinkOptions()
            {
                PropagateCompletion = true
            });

            foreach (var captureFile in captureFiles)
            {
                this.CaptureProcessorBlock.SendAsync(captureFile).Wait();
            }
            this.CaptureProcessorBlock.Complete();

            Task.WhenAll(
                storeCapturesAwait,
                storeL3Await,
                storeL3StatisticsAwait,
                storeL4Await,
                storeL4StatisticsAwait,
                storeL7Await,
                storeL7StatisticsAwait,
                storeFramesAwait,
                storeL7PdusAwait,
                pmCaptureL3ConversationAwait,
                pmCaptureL4ConversationAwait,
                pmCaptureL7ConversationAwait
                ).Wait();
        }