Пример #1
0
        public static IAsyncEnumerable <DbRowGrpcModel> SubscribeAsync(this MyNoSqlGrpcReaderConnection connection,
                                                                       string tableName, string partitionKey)
        {
            var grpcRequest = new SubscribeGrpcRequest
            {
                ConnectionId = connection.ConnectionId,
                TableName    = tableName,
                PartitionKey = partitionKey
            };

            return(connection.MyNoSqlGrpcServerReader.SubscribeAsync(grpcRequest));
        }
        public IAsyncEnumerable <DbRowGrpcModel> SubscribeAsync(SubscribeGrpcRequest request, CancellationToken token = default)
        {
            var session = _sessionsList.GetSession(request.ConnectionId);

            var table = _dbTablesList.GetTable(request.TableName);

            var result = table.LockWithReadAccess(readAccess =>
            {
                session.SubscribeToPartition(request.TableName, request.PartitionKey);

                var partition = readAccess.TryGetPartition(request.PartitionKey);

                if (partition == null)
                {
                    return((IReadOnlyList <DbRowGrpcModel>)Array.Empty <DbRowGrpcModel>());
                }

                return(partition.Get().ToList());
            });


            return(new AsyncEnumerableResult <DbRowGrpcModel>(result));
        }