public RollingMemoryReadStream(IReadStreamQueueSource sourceQueue,
     IReadStreamQueueRefresher readStreamQueueRefresher,
     ICompletedReadStreamHandler completedReadStreamHandler,
     IRollingMemoryStateMonitor rollingMemoryStateMonitor)
 {
     _sourceQueue = sourceQueue;
     _readStreamQueueRefresher = readStreamQueueRefresher;
     _completedReadStreamHandler = completedReadStreamHandler;
     _rollingMemoryStateMonitor = rollingMemoryStateMonitor;
 }
Ejemplo n.º 2
0
        public RollingMemory(
            IWriteStreamFactory writeStreamFactory,
            IWriteStreamToReadStreamConverter writeStreamToReadStreamConverter,
            IStreamDataSourceDisposerFactory writeStreamDataSourceDisposerFactory,
            IStreamDataSourceDisposerFactory readStreamDataSourceDisposerFactory,
            IRollingMemoryStateMonitor rollingMemoryStateMonitor,
            long? maximumAllowedWriteStreamBytes, TimeSpan? maximumAllowedUnavailableAge,
            long? maximumAllowedUnavailableBytes, ICurrentDateTimeSource currentDateTimeSource)
        {

            var readStreamQueue = new ReadStreamQueue();

            var dataSourceDisposerRegister = new DataSourceDisposerRegister();

            var completedWriteStreamBuffer = new CompletedWriteStreamBuffer(
                readStreamQueue,
                writeStreamToReadStreamConverter,
                readStreamDataSourceDisposerFactory,
                dataSourceDisposerRegister,
                maximumAllowedWriteStreamBytes);

            var rollingMemoryWriteStream = new RollingMemoryWriteStream(
                writeStreamFactory,
                completedWriteStreamBuffer,
                completedWriteStreamBuffer,
                currentDateTimeSource,
                writeStreamDataSourceDisposerFactory,
                dataSourceDisposerRegister,
                rollingMemoryStateMonitor);

            var readStreamQueueRefresher = new ReadStreamQueueRefresher(
                rollingMemoryWriteStream,
                completedWriteStreamBuffer,
                maximumAllowedUnavailableAge,
                maximumAllowedUnavailableBytes);

            var completedReadStreamHandler = new CompletedReadStreamHandler(
                dataSourceDisposerRegister);

            var rollingMemoryReadStream = new RollingMemoryReadStream(
                readStreamQueue,
                readStreamQueueRefresher,
                completedReadStreamHandler,
                rollingMemoryStateMonitor);

            _readStream = rollingMemoryReadStream;

            _writeStream = rollingMemoryWriteStream;

            _completedWriteStreamBuffer = completedWriteStreamBuffer;
        }
 public BlockingWriteRollingMemory(Func<IRollingMemoryStateMonitor, IRollingMemory> targetFactory,
     IRollingMemoryStateMonitor rollingMemoryStateMonitor,
     long blockWritesAboveLagBytes)
 {
     var lagCountingRollingMemoryStateMonitor = new LagCountingRollingMemoryStateMonitor();
     rollingMemoryStateMonitor = new CompositeRollingMemoryStateMonitor(rollingMemoryStateMonitor, lagCountingRollingMemoryStateMonitor);
     _target = targetFactory(rollingMemoryStateMonitor);
     _writeStream = new BlockForCapacityWriteStream(
         _target.WriteStream,
         () => blockWritesAboveLagBytes - lagCountingRollingMemoryStateMonitor.Lag,
         lagCountingRollingMemoryStateMonitor.WaitForLagChange,
         lagCountingRollingMemoryStateMonitor.AcquireLagChangeLock,
         lagCountingRollingMemoryStateMonitor.ReleaseLagChangeLock
     );
 }
        public RollingMemoryWriteStream(IWriteStreamFactory targetFactory,
            ICompletedWriteStreamHandler completedWriteStreamHandler,
            IWriteStreamLengthValidator activeWriteStreamLengthValidator,
            ICurrentDateTimeSource currentDateTimeSource,
            IStreamDataSourceDisposerFactory writeStreamDataSourceDisposerFactory,
            IDataSourceDisposerRegister dataSourceDisposerRegister,
            IRollingMemoryStateMonitor rollingMemoryStateMonitor)
        {
            _targetFactory = targetFactory;

            _completedWriteStreamHandler = completedWriteStreamHandler;

            _activeWriteStreamLengthValidator = activeWriteStreamLengthValidator;

            _currentDateTimeSource = currentDateTimeSource;

            _writeStreamDataSourceDisposerFactory = writeStreamDataSourceDisposerFactory;

            _dataSourceDisposerRegister = dataSourceDisposerRegister;

            _rollingMemoryStateMonitor = rollingMemoryStateMonitor;
        }
Ejemplo n.º 5
0
 private IRollingMemory BuildCoreRollingMemory(IRollingMemoryStateMonitor rollingMemoryStateMonitor)
 {
     return new RollingMemory(
         WriteStreamFactory,
         WriteStreamToReadStreamConverter,
         WriteStreamDataSourceDisposerFactory,
         ReadStreamDataSourceDisposerFactory,
         rollingMemoryStateMonitor,
         MaximumAllowedWriteStreamBytes,
         MaximumAllowedUnavailableAge,
         MaximumAllowedUnavailableBytes,
         CurrentDateTimeSource
     );
 }
Ejemplo n.º 6
0
        /// <summary>
        /// Allows you to register a monitor which will be continually updated whenever the write position or read position changes.
        /// You can use this to monitor the total amount of data written and read.  At any given time, the difference between the
        /// total written and the total read should be a rough indicator of the amount of data which is currently stored in
        /// rolling memory.  Each method is individually thread-safe, and both should be lightweight.  The default is null,
        /// which means no monitoring.
        /// </summary>
        /// <param name="rollingMemoryStateMonitor"></param>
        /// <returns></returns>

        public RollingMemoryBuilder SetRollingMemoryStateMonitor(IRollingMemoryStateMonitor rollingMemoryStateMonitor)
        {
            _rollingMemoryStateMonitor = rollingMemoryStateMonitor;

            return this;
        }