/// <summary> /// TBD /// </summary> /// <param name="f">TBD</param> /// <param name="startPosition">TBD</param> /// <param name="fileMode">TBD</param> /// <param name="attributes">TBD</param> /// <param name="shape">TBD</param> /// <param name="autoFlush"></param> /// <param name="flushSignaler"></param> public FileSink(FileInfo f, long startPosition, FileMode fileMode, Attributes attributes, SinkShape <ByteString> shape, bool autoFlush, FlushSignaler flushSignaler) : base(shape) { _f = f; _startPosition = startPosition; _fileMode = fileMode; Attributes = attributes; _autoFlush = autoFlush; _flushSignaler = flushSignaler; Label = $"FileSink({f}, {fileMode})"; }
/// <summary> /// TBD /// </summary> /// <param name="f">TBD</param> /// <param name="completionPromise">TBD</param> /// <param name="bufferSize">TBD</param> /// <param name="startPosition">TBD</param> /// <param name="fileMode">TBD</param> /// <param name="autoFlush"></param> /// <param name="flushCommand"></param> /// <exception cref="ArgumentException">TBD</exception> /// <returns>TBD</returns> public static Props Props( FileInfo f, TaskCompletionSource <IOResult> completionPromise, int bufferSize, long startPosition, FileMode fileMode, bool autoFlush = false, FlushSignaler flushCommand = null) { if (bufferSize <= 0) { throw new ArgumentException($"bufferSize must be > 0 (was {bufferSize})", nameof(bufferSize)); } if (startPosition < 0) { throw new ArgumentException($"startPosition must be >= 0 (was {startPosition})", nameof(startPosition)); } return(Actor.Props.Create(() => new FileSubscriber(f, completionPromise, bufferSize, startPosition, fileMode, autoFlush, flushCommand)) .WithDeploy(Deploy.Local)); }
/// <summary> /// TBD /// </summary> /// <param name="f">TBD</param> /// <param name="completionPromise">TBD</param> /// <param name="bufferSize">TBD</param> /// <param name="startPosition">TBD</param> /// <param name="fileMode">TBD</param> /// <param name="autoFlush"></param> /// <param name="flushSignaler"></param> public FileSubscriber( FileInfo f, TaskCompletionSource <IOResult> completionPromise, int bufferSize, long startPosition, FileMode fileMode, bool autoFlush, FlushSignaler flushSignaler) { _f = f; _completionPromise = completionPromise; _startPosition = startPosition; _fileMode = fileMode; _autoFlush = autoFlush; _log = Context.GetLogger(); _requestStrategy = new WatermarkRequestStrategy(highWatermark: bufferSize); if (flushSignaler != null) { flushSignaler.FileSubscriber = Self; } }