Example #1
0
        private void RecalculateProductionTimer()
        {
            _registryGroupState.Round = 0;

            if (_syncCycleDescriptor != null)
            {
                _syncCycleDescriptor.CancellationTokenSource.Cancel();
                _syncCycleDescriptor.CancellationRequested = true;
            }

            _syncCycleDescriptor = new SyncCycleDescriptor(_synchronizationContext.LastBlockDescriptor);

            PeriodicTaskFactory.Start(o =>
            {
                SyncCycleDescriptor syncCycleDescriptor = (SyncCycleDescriptor)o;
                SortedList <ushort, RegistryRegisterBlock> transactionStateWitnesses           = _registryMemPool.DequeueStateWitnessBulk();
                SortedList <ushort, RegistryRegisterUtxoConfidential> transactionUtxoWitnesses = _registryMemPool.DequeueUtxoWitnessBulk();

                RegistryFullBlock registryFullBlock   = ProduceTransactionsFullBlock(transactionStateWitnesses, transactionUtxoWitnesses, syncCycleDescriptor.SynchronizationDescriptor, syncCycleDescriptor.Round);
                RegistryShortBlock registryShortBlock = ProduceTransactionsShortBlock(registryFullBlock);

                SendTransactionsBlocks(registryFullBlock, registryShortBlock);

                syncCycleDescriptor.Round++;

                if (syncCycleDescriptor.CancellationRequested)
                {
                    syncCycleDescriptor.CancellationTokenSource.Cancel();
                }
            }, _syncCycleDescriptor, _registrationPeriodMsec * _registryConfiguration.TotalNodes, _registryConfiguration.Position * _registrationPeriodMsec, cancelToken: _syncCycleDescriptor.CancellationTokenSource.Token, periodicTaskCreationOptions: TaskCreationOptions.LongRunning);
        }