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)]);