예제 #1
0
        /// <summary>
        /// Gets the singleton instance for this object.
        /// </summary>
        /// <returns></returns>
        public static NetworkNodesPool GetInstance(ILoggerFactory loggerFactory)
        {
            if (_instance == null)
            {
                lock (_threadLock)
                {
                    if (_instance == null)
                    {
                        _instance = new NetworkNodesPool(loggerFactory);
                    }
                }
            }

            return(_instance);
        }
예제 #2
0
        public NetworkManager(NetworkNodesPool nodePool, ILoggerFactory loggerFactory, IBlockValidator blockValidator, IDifficultyCalculator difficultyCalculator, IBlockchainRepository repo, string netId)
        {
            _logger   = loggerFactory.CreateLogger <NetworkManager>();
            _nodePool = nodePool;
            _repo     = repo;
            _netId    = netId;
            _relayedTransactionHashes = new List <string>();
            _relayedBlockHashes       = new List <string>();
            _messageHandler           = new MessageHandler(this, ConcurrentTransactionPool.GetInstance(), nodePool, difficultyCalculator, blockValidator, loggerFactory, repo, netId);
            _handshakeMessageHandler  = new HandshakeMessageHandler(this, nodePool, loggerFactory, repo, netId);
            _delays = new ConcurrentBag <int>();

            EventPublisher.GetInstance().OnValidatedBlockCreated    += OnValidatedBlockCreated;
            EventPublisher.GetInstance().OnValidTransactionReceived += OnValidTransactionReceived;
            // In the first phase, check every 10s if there is a node that has a longer chain than ours.
            // After the sync completed, exit the 'syncing' state and accept new blocks and transactions.
            StartSyncProcess(new CancellationTokenSource()); // todo cts
        }
예제 #3
0
 public HandshakeMessageHandler(INetworkManager manager, NetworkNodesPool nodePool, ILoggerFactory loggerFactory, IBlockchainRepository blockchainRepo, string netId)
     : base(manager, nodePool, loggerFactory)
 {
     _blockchainRepo = blockchainRepo;
     _netId          = netId;
 }
예제 #4
0
 protected AbstractMessageHandler(INetworkManager manager, NetworkNodesPool nodePool, ILoggerFactory loggerFactory)
 {
     _networkManager = manager;
     _nodePool       = nodePool;
     _logger         = loggerFactory.CreateLogger <MessageHandler>();
 }
예제 #5
0
        public MessageHandler(INetworkManager manager, ConcurrentTransactionPool txPool, NetworkNodesPool nodePool, IDifficultyCalculator difficultyCalculator, IBlockValidator blockValidator, ILoggerFactory loggerFactory, IBlockchainRepository blockchainRepo, string netId)
            : base(manager, nodePool, loggerFactory)
        {
            _difficultyCalculator = difficultyCalculator;
            _blockValidator       = blockValidator;
            _blockchainRepo       = blockchainRepo;
            _netId  = netId;
            _txPool = txPool;

            _blockchain = _blockchainRepo.GetChainByNetId(_netId);
            _difficulty = _difficultyCalculator.CalculateCurrentDifficulty(_blockchain);
        }