public Logic(ActorRefBackpressureSinkStage <TIn> stage, int maxBuffer) : base(stage.Shape) { _stage = stage; _ackType = _stage._ackMessage.GetType(); _maxBuffer = maxBuffer; _buffer = new List <TIn>(); SetHandler(_stage._inlet, this); }
public Logic(ActorRefBackpressureSinkStage <TIn> stage, int maxBuffer) : base(stage.Shape) { _stage = stage; _ackType = _stage._ackMessage.GetType(); _maxBuffer = maxBuffer; _buffer = new List <TIn>(); SetHandler(_stage._inlet, onPush: () => { _buffer.Add(Grab(_stage._inlet)); if (_acknowledgementReceived) { DequeueAndSend(); _acknowledgementReceived = false; } if (_buffer.Count < maxBuffer) { Pull(stage._inlet); } }, onUpstreamFinish: () => { if (_buffer.Count == 0) { Finish(); } else { _completeReceived = true; } }, onUpstreamFailure: ex => { stage._actorRef.Tell(stage._onFailureMessage(ex), _self); FailStage(ex); }); }