public override async Task ListKeyValues(KeyListRequest request, IServerStreamWriter <KeyValueListResponse> responseStream, ServerCallContext context) { var pageSize = request.PageSize > 0 && request.PageSize < MaxPageSize ? request.PageSize : MaxPageSize; foreach (var entry in state.Where(e => e.Key.StartsWith(request.KeyPrefix)).Take((int)pageSize)) { //await responseStream.WriteAsync(new KeyValueListResponse { Key = entry.Key, Value = entry.Value.Value }); } }
//public override Task<AddResponse> Add(AddRequest request, ServerCallContext context) //{ // var result = AddResponse.Types.AddResult.Success; // state.AddOrUpdate(request.Key, request, (k, kv) => { result = AddResponse.Types.AddResult.KeyAlreadyExists; return kv; }); // Console.WriteLine($"Added: {request}"); // return Task.FromResult(new AddResponse { Result = result }); //} //public override Task<AddOrUpdateResponse> AddOrUpdate(AddRequest request, ServerCallContext context) //{ // var result = AddOrUpdateResponse.Types.AddOrUpdateResult.KeyAdded; // state.AddOrUpdate(request.Key, request, (k, kv) => { result = AddOrUpdateResponse.Types.AddOrUpdateResult.KeyUpdated; return request; }); // Console.WriteLine($"{result}: {request}"); // return Task.FromResult(new AddOrUpdateResponse { Result = result }); //} //public override Task<DeleteResponse> Delete(DeleteRequest request, ServerCallContext context) //{ // var result = state.TryRemove(request.Key, out var _) // ? DeleteResponse.Types.DeleteResult.Success // : DeleteResponse.Types.DeleteResult.NotFound; // Console.WriteLine($"Deleted {result}: {request}"); // return Task.FromResult(new DeleteResponse { Result = result }); //} //public override Task<GetResponse> Get(GetRequest request, ServerCallContext context) //{ // var result = state.TryGetValue(request.Key, out var v) // ? GetResponse.Types.GetResult.Success // : GetResponse.Types.GetResult.NotFound; // Console.WriteLine($"Returned {result}: {request}"); // return Task.FromResult(new GetResponse { Result = result, Value = v.Value }); //} public override async Task ListKeys(KeyListRequest request, IServerStreamWriter <KeyListResponse> responseStream, ServerCallContext context) { var pageSize = request.PageSize > 0 && request.PageSize < MaxPageSize ? request.PageSize : MaxPageSize; foreach (var key in state.Keys.Where(k => (k ?? "").StartsWith(request.KeyPrefix)).Take((int)pageSize)) { await responseStream.WriteAsync(new KeyListResponse { Key = key }); } }