Пример #1
0
 public MultiThreadedStrategy(ILogMedia media, Encoding encoding, IRegex headerRe,
                              MessagesSplitterFlags splitterFlags, TextStreamPositioningParams textStreamPositioningParams,
                              string parentLoggingPrefix, ITraceSourceFactory traceSourceFactory)
     : this(media, encoding, headerRe, splitterFlags, false, textStreamPositioningParams, parentLoggingPrefix, traceSourceFactory)
 {
     BytesToParsePerThread = GetBytesToParsePerThread(textStreamPositioningParams);
 }
Пример #2
0
        public MessagesSplitter(ITextAccess textAccess, IRegex messageHeaderRe, MessagesSplitterFlags flags = MessagesSplitterFlags.Default)
            : base()
        {
            if (textAccess == null)
            {
                throw new ArgumentNullException(nameof(textAccess));
            }
            if (messageHeaderRe == null)
            {
                throw new ArgumentNullException(nameof(messageHeaderRe));
            }
            if ((messageHeaderRe.Options & ReOptions.RightToLeft) != 0)
            {
                throw new ArgumentException("Header regular expression must not be RightToLeft");
            }
            if (textAccess.MaximumSequentialAdvancesAllowed < 3)
            {
                throw new ArgumentException("ITextAccess implementation must allow 3 or more sequential advances", "textAccess");
            }

            this.textAccess            = textAccess;
            this.forwardModeRe         = messageHeaderRe;
            this.bufferLengthThreshold = 0;
            if ((flags & MessagesSplitterFlags.PreventBufferUnderflow) != 0)
            {
                this.bufferLengthThreshold = textAccess.AverageBufferLength / 4;
            }
        }
Пример #3
0
        public MessagesSplitterFlags GetHeaderReSplitterFlags()
        {
            var headerRe = this;
            MessagesSplitterFlags ret = MessagesSplitterFlags.None;

            if (headerRe.SuffersFromPartialMatchProblem)
            {
                ret |= MessagesSplitterFlags.PreventBufferUnderflow;
            }
            return(ret);
        }
Пример #4
0
 internal MultiThreadedStrategy(ILogMedia media, Encoding encoding, IRegex headerRe, MessagesSplitterFlags splitterFlags,
                                bool useMockThreading, TextStreamPositioningParams textStreamPositioningParams, string parentLoggingPrefix, ITraceSourceFactory traceSourceFactory)
     : base(media, encoding, headerRe, textStreamPositioningParams)
 {
     if (parentLoggingPrefix != null)
     {
         this.tracer = traceSourceFactory.CreateTraceSource("LogSource", string.Format("{0}.mts_{1:x4}", parentLoggingPrefix, Hashing.GetShortHashCode(this.GetHashCode())));
     }
     this.streamDataPool = new ThreadSafeObjectPool <Byte[]>(pool =>
     {
         var ret = new Byte[BytesToParsePerThread];
         tracer.Info("Allocating new piece of stream data: {0:x8}", ret.GetHashCode());
         return(ret);
     });
     this.outputBuffersPool = new ThreadSafeObjectPool <List <PostprocessedMessage> >(pool =>
     {
         var ret = new List <PostprocessedMessage>(1024 * 8);
         tracer.Info("Allocating new output buffer: {0:x8}", ret.GetHashCode());
         return(ret);
     });
     this.useMockThreading = useMockThreading;
     this.splitterFlags    = splitterFlags;
 }
Пример #5
0
 internal MultiThreadedStrategy(ILogMedia media, Encoding encoding, IRegex headerRe, MessagesSplitterFlags splitterFlags, bool useMockThreading, TextStreamPositioningParams textStreamPositioningParams)
     : base(media, encoding, headerRe, textStreamPositioningParams)
 {
     this.streamDataPool = new ThreadSafeObjectPool <Byte[]>(pool =>
     {
         var ret = new Byte[BytesToParsePerThread];
         tracer.Info("Allocating new piece of stream data: {0}", ret.GetHashCode());
         return(ret);
     });
     this.outputBuffersPool = new ThreadSafeObjectPool <List <PostprocessedMessage> >(pool =>
     {
         var ret = new List <PostprocessedMessage>(1024 * 8);
         tracer.Info("Allocating new output buffer: {0}", ret.GetHashCode());
         return(ret);
     });
     this.useMockThreading = useMockThreading;
     this.splitterFlags    = splitterFlags;
 }
Пример #6
0
 public MultiThreadedStrategy(ILogMedia media, Encoding encoding, IRegex headerRe, MessagesSplitterFlags splitterFlags, TextStreamPositioningParams textStreamPositioningParams)
     : this(media, encoding, headerRe, splitterFlags, false, textStreamPositioningParams)
 {
     BytesToParsePerThread = GetBytesToParsePerThread(textStreamPositioningParams);
 }
Пример #7
0
 public SingleThreadedStrategy(ILogMedia media, Encoding encoding, IRegex headerRe, MessagesSplitterFlags splitterFlags, TextStreamPositioningParams textStreamPositioningParams)
     : base(media, encoding, headerRe, textStreamPositioningParams)
 {
     this.textSplitter = new ReadMessageFromTheMiddleProblem(new MessagesSplitter(new StreamTextAccess(media.DataStream, encoding, textStreamPositioningParams), headerRe, splitterFlags));
 }