public async Task <byte[]> GetFile(string fileName) { var cts = new CancellationTokenSource(); var request = new UpdateStreamRequestMessage() { FileName = fileName }; using var stream = new MemoryStream(); using (var streamingCall = _adminClient.GetUpdateStream(request)) { try { await foreach (var val in streamingCall.ResponseStream.ReadAllAsync(cts.Token)) { byte[] currentBytes = val.BytesData.ToByteArray(); stream.Write(currentBytes, 0, currentBytes.Length); } } catch (Exception e) { Console.WriteLine(e); throw; } } return(stream.ToArray()); }
public override async Task GetUpdateStream(UpdateStreamRequestMessage request, IServerStreamWriter <UpdateStreamMessage> responseStream, ServerCallContext context) { byte[] bytes = _updateService.GetFileContents(request.FileName); int count = 0; int currentIndex = 0; int bytesLeft = bytes.Length; while (currentIndex < bytesLeft) { UpdateStreamMessage message = new UpdateStreamMessage(); if (bytesLeft <= BLOCK_SIZE) { message.BytesData = ByteString.CopyFrom(bytes); message.BlockSize = bytesLeft; message.BlockIndex = count; currentIndex = bytesLeft; } else { message.BytesData = ByteString.CopyFrom(bytes[currentIndex..(BLOCK_SIZE + currentIndex)]);