Baconography.NeutralServices.KitaroDB.UsageStatistics.IncrementDomain C# (CSharp) Method

IncrementDomain() public method

public IncrementDomain ( string domain, bool link ) : Task
domain string
link bool
return Task
        public async Task IncrementDomain(string domain, bool link)
        {
            try
            {
                uint links = 0;
                uint comments = 0;
                uint hash = (uint)domain.GetHashCode();
                var keyspace = GenerateDomainHashKeyspace(hash);

                using (var dbCursor = await _domainStatisticsDB.SeekAsync(_domainStatisticsDB.GetKeys()[0], keyspace, DBReadFlags.AutoLock | DBReadFlags.WaitOnLock))
                {
                    if (_terminateSource.IsCancellationRequested)
                        return;
                    if (dbCursor != null)
                    {
                        // Decode cursor
                        var record = dbCursor.Get();
                        links = BitConverter.ToUInt32(record.Skip(DomainHashKeySpaceSize).Take(4).ToArray(), 0);
                        comments = BitConverter.ToUInt32(record.Skip(DomainHashKeySpaceSize + 4).Take(4).ToArray(), 0);
                        // Increment variable
                        if (link)
                            links++;
                        else
                            comments++;
                        // Update record
                        var combinedSpace = GenerateCombinedDomainKeyspace(hash, links, comments);
                        await dbCursor.UpdateAsync(combinedSpace);
                    }
                    else
                    {
                        links = (uint)(link ? 1 : 0);
                        comments = (uint)(link ? 0 : 1);


                        if (link)
                            links++;
                        else
                            comments++;
                        // Insert a fresh, zero'd record
                        var combinedSpace = GenerateCombinedDomainKeyspace(hash, links, comments);
                        await _domainStatisticsDB.InsertAsync(combinedSpace);
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine(DBError.TranslateError((uint)ex.HResult));
            }
        }