private void Buffering()
{
Receive<EndpointManager.Send>(send => EnqueueInBuffer(send));
Receive<BackoffTimer>(backoff => SendBufferedMessages());
Receive<FlushAndStop>(stop =>
{
_buffer.AddLast(stop); //Flushing is postponed after the pending writes
Context.System.Scheduler.ScheduleTellOnce(Settings.FlushWait, Self, FlushAndStopTimeout.Instance, Self);
});
Receive<FlushAndStopTimeout>(timeout =>
{
// enough, ready to flush
DoFlushAndStop();
});
}