Exemple #1
0
        /// <summary>
        /// Construct a tree from given storage, using the specified comparer of key
        /// </summary>
        /// <param name="keySerializer">Tool to serialize node keys.</param>
        /// <param name="valueSerializer">Tool to serialize node values<param>
        /// <param name="recordStorage">Underlying tool for storage.</param>
        /// <param name="keyComparer">Key comparer.</param>
        public TreeDiskNodeManager(ISerializer <K> keySerializer
                                   , ISerializer <V> valueSerializer
                                   , IRecordStorage recordStorage
                                   , IComparer <K> keyComparer)
        {
            if (recordStorage == null)
            {
                throw new ArgumentNullException("nodeStorge");
            }

            this.recordStorage = recordStorage;
            this.serializer    = new TreeDiskNodeSerializer <K, V> (this, keySerializer, valueSerializer);
            this.KeyComparer   = keyComparer;
            this.EntryComparer = Comparer <Tuple <K, V> > .Create((a, b) => {
                return(KeyComparer.Compare(a.Item1, b.Item1));
            });

            // The first record of nodeStorage stores id of root node,
            // if this record do not exist at the time this index instanitate,
            // then attempt to create it
            var firstBlockData = recordStorage.Find(1u);

            if (firstBlockData != null)
            {
                this.rootNode = Find(BufferHelper.ReadBufferUInt32(firstBlockData, 0));
            }
            else
            {
                this.rootNode = CreateFirstRoot();
            }
        }
 /// <summary>
 /// Returns a new node manager instance with specified parameters.
 /// </summary>
 public override ITreeNodeManager <K, uint> GetNewNodeManager <K> (
     ISerializer <K> keySerializer,
     UintSerializer valueSerializer,
     IRecordStorage recordStorage,
     ushort minEntriesPerNode)
 {
     return(new MemoryTreeNodeManager <K, uint>(minEntriesPerNode, Comparer <K> .Default));
 }
Exemple #3
0
        public ChannelMiddleware(RequestDelegate next, IRecordStorage storage, RinChannel rinChannel, BodyDataTransformerSet bodyDataTransformerSet, IHostApplicationLifetime applicationLifetime)
        {
            _next = next;

            _storage                = storage;
            _rinChannel             = rinChannel;
            _bodyDataTransformerSet = bodyDataTransformerSet;

            applicationLifetime.ApplicationStopping.Register(() => _rinChannel.Dispose());
        }
Exemple #4
0
        public TodoItemHistoryView(IRecordStorage storage) : base("TodoHistoryView")
        {
            if (storage.GetRecordType() == TodoRecordTypes.Task)
            {
                AddRow("Item", (storage as TodoRecordStorage <TodoTaskRecord>).Record.Text);
            }
            else if (storage.GetRecordType() == TodoRecordTypes.TaskStatus)
            {
                AddRow("Status", Tr.Get("ItemStatusTypes." + (storage as TodoRecordStorage <TodoTaskStatusRecord>).Record.Status));
            }

            AddLastRow("Timestamp", Time.DateTimeString(storage.Timestamp));
        }
Exemple #5
0
        void Process(IRecordStorage storage)
        {
            LastProcessedTransactionId = Math.Max(storage.TransactionId, LastProcessedTransactionId);
            _historyTransactionIds.Add(storage.TransactionId);

            if (storage.GetRecordType() == TodoRecordTypes.ListName)
            {
                var nameRecord = storage as TodoRecordStorage <TodoListNameRecord>;
                if (CurrentListNameRecord != null)
                {
                    if (storage.TransactionId > CurrentListNameRecord.TransactionId)
                    {
                        CurrentListNameRecord = nameRecord;
                    }
                }
                else
                {
                    CurrentListNameRecord = nameRecord;
                }
            }
            else if (storage.GetRecordType() == TodoRecordTypes.Task)
            {
                var itemRecord = storage as TodoRecordStorage <TodoTaskRecord>;

                _items.TryGetValue(itemRecord.TargetedTransactionId, out var item);
                if (item == null)
                {
                    _items[itemRecord.TransactionId] = new TodoTask(itemRecord);
                }
                else
                {
                    item.Update(itemRecord);
                }
            }
            else if (storage.GetRecordType() == TodoRecordTypes.TaskStatus)
            {
                var statusRecord = storage as TodoRecordStorage <TodoTaskStatusRecord>;
                if (_items.TryGetValue(statusRecord.TargetedTransactionId, out var item))
                {
                    item.Update(statusRecord);
                }
            }
        }
        public DiskTreeNodeManager(ISerializer <K> keySerializer, ISerializer <V> valueSerializer,
                                   IRecordStorage recordStorage, IComparer <K> keyComparer, DiskNodeOptions options = null)
        {
            if (recordStorage == null)
            {
                throw new ArgumentNullException("recordStorage");
            }
            if (options == null)
            {
                options = new DiskNodeOptions();
            }

            this.recordStorage = recordStorage;
            this.dirtyNodes    = new Dictionary <uint, TreeNode <K, V> >();
            this.weakNodes     = new Dictionary <uint, WeakReference <TreeNode <K, V> > >();
            this.strongNodes   = new Queue <TreeNode <K, V> >();
            this.serializer    = new DiskTreeNodeSerializer <K, V>(this, keySerializer, valueSerializer);
            this.keyComparer   = keyComparer;
            this.entryComparer = new TreeEntryComparer <K, V>(keyComparer);

            this.weakNodeCleanThreshold = options.WeakNodeCleanInterval;
            this.maxStrongNodes         = options.MaxStrongNode;
            this.minEntriesPerNode      = options.MinEntriesPerNode;

            this.deleteIds      = new List <uint>(weakNodeCleanThreshold / 2);
            this.cleanupCounter = 0;

            // Find or create the root node.
            var firstData = recordStorage.Find(1U);

            if (firstData != null)
            {
                this.rootNode = Find(BufferHelper.ReadUInt32(firstData, 0));
            }
            else
            {
                this.rootNode = CreateFirstRoot();
            }
        }
Exemple #7
0
 public RinCoreHub(IRecordStorage storage, RinChannel rinChannel, BodyDataTransformerSet bodyDataTransformerSet)
 {
     _storage                = storage;
     _rinChannel             = rinChannel;
     _bodyDataTransformerSet = bodyDataTransformerSet;
 }
Exemple #8
0
        //
        // Constructors
        //

        /// <summary>
        /// Construct a tree from given storage, using default comparer of key
        /// </summary>
        public TreeDiskNodeManager(ISerializer <K> keySerializer
                                   , ISerializer <V> valueSerializer
                                   , IRecordStorage nodeStorage)
            : this(keySerializer, valueSerializer, nodeStorage, Comparer <K> .Default)
        {
        }
 /// <summary>
 /// Returns a new node manager instance with specified parameters.
 /// </summary>
 public override ITreeNodeManager <K, uint> GetNewNodeManager <K> (ISerializer <K> keySerializer,
                                                                   UintSerializer valueSerializer, IRecordStorage recordStorage, ushort minEntriesPerNode)
 {
     return(new DiskTreeNodeManager <K, uint>(
                keySerializer,
                valueSerializer,
                recordStorage,
                new DiskNodeOptions(500, 200, minEntriesPerNode)
                ));
 }
Exemple #10
0
 public DownloadResponseBodyMiddleware(RequestDelegate next, IRecordStorage storage)
 {
     _next    = next;
     _storage = storage;
 }
Exemple #11
0
 public GetDetailByIdMiddleware(RequestDelegate next, IRecordStorage storage)
 {
     _storage = storage;
 }
 public DiskTreeNodeManager(ISerializer <K> keySerializer, ISerializer <V> valueSerializer,
                            IRecordStorage recordStorage, DiskNodeOptions options = null) :
     this(keySerializer, valueSerializer, recordStorage, Comparer <K> .Default, options)
 {
 }
Exemple #13
0
 /// <summary>
 /// Returns a new node manager instance with specified parameters.
 /// </summary>
 public abstract ITreeNodeManager <K, uint> GetNewNodeManager <K>(ISerializer <K> keySerializer,
                                                                  UintSerializer valueSerializer, IRecordStorage recordStorage, ushort minEntriesPerNode);
Exemple #14
0
 public RinCoreHub(IRecordStorage storage, BodyDataTransformerSet bodyDataTransformerSet)
 {
     _storage = storage;
     _bodyDataTransformerSet = bodyDataTransformerSet;
 }
Exemple #15
0
 async Task SaveTodoStorage(TransactionDownloadData <Transaction> transactionDownload, IRecordStorage todoStorage)
 {
     try
     {
         transactionDownload.AddDecryptedAttachement("todo", todoStorage.ToByteArray());
         await transactionDownload.TransactionManager.StoreDecryptedTransactionData(transactionDownload);
     }
     catch (Exception ex)
     {
         Log.IgnoreException(ex);
     }
 }