Exemplo n.º 1
0
        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");
            }
        }