public override async Task Get(GetRequest request, IServerStreamWriter <QueryResponse> responseStream, ServerCallContext context) { try { // convert iri strings to flatbuffer NodeIDs var nodeIds = request.Iris.Select(iri => { var builder = new FlatBufferBuilder(16); var nid = NodeID.CreateNodeID(builder, "".CopyTo(builder), iri.CopyTo(builder)); builder.Finish(nid.Value); return(NodeID.GetRootAsNodeID(builder.DataBuffer)); }); var result = await _db.Items(nodeIds); var sendCount = 0; foreach (var chunk in result) { sendCount++; var fn = new FlatNode(); // todo: remove the double copy here _logger.LogInformation($"Sending Node:\n {chunk.ToDisplayString()}"); fn.FlatBuffer = ByteString.CopyFrom(chunk.ByteBuffer.ToSizedArray()); var qr = new QueryResponse(); qr.Node = fn; await responseStream.WriteAsync(qr); } _logger.LogInformation($"Sent back {sendCount} items."); } catch (Exception e) { _logger.LogError(e, "Get failed"); } }