protected override bool Receive(object message)
{
return message.Match()
.With<OnNext>(next =>
{
try
{
var byteString = (ByteString) next.Element;
var bytes = (byteString.AsByteBuffer()).Array();
_chan.Write(bytes, 0, bytes.Length);
_bytesWritten += bytes.Length;
}
catch (Exception ex)
{
_completionPromise.TrySetResult(new IOResult(_bytesWritten, Result.Failure<NotUsed>(ex)));
Cancel();
}
})
.With<OnError>(error =>
{
_log.Error(error.Cause, $"Tearing down FileSink({_f.FullName}) due to upstream error");
_completionPromise.TrySetResult(new IOResult(_bytesWritten, Result.Failure<NotUsed>(error.Cause)));
Context.Stop(Self);
})
.With<OnComplete>(() =>
{
try
{
_chan.Flush(true);
}
catch (Exception ex)
{
_completionPromise.TrySetResult(new IOResult(_bytesWritten, Result.Failure<NotUsed>(ex)));
}
Context.Stop(Self);
})
.WasHandled;
}