public override void HandleMessage(ZeroPacket message)
        {
            base.HandleMessage(message);
            switch (message.PacketType)
            {
            case Eth65MessageCode.PooledTransactions:
                PooledTransactionsMessage pooledTxMsg
                    = Deserialize <PooledTransactionsMessage>(message.Content);
                Metrics.Eth65PooledTransactionsReceived++;
                ReportIn(pooledTxMsg);
                Handle(pooledTxMsg);
                break;

            case Eth65MessageCode.GetPooledTransactions:
                GetPooledTransactionsMessage getPooledTxMsg
                    = Deserialize <GetPooledTransactionsMessage>(message.Content);
                ReportIn(getPooledTxMsg);
                Handle(getPooledTxMsg);
                break;

            case Eth65MessageCode.NewPooledTransactionHashes:
                NewPooledTransactionHashesMessage newPooledTxMsg =
                    Deserialize <NewPooledTransactionHashesMessage>(message.Content);
                ReportIn(newPooledTxMsg);
                Handle(newPooledTxMsg);
                break;
            }
        }
        private void Handle(GetPooledTransactionsMessage msg)
        {
            Metrics.Eth65GetPooledTransactionsReceived++;

            Stopwatch stopwatch = Stopwatch.StartNew();

            Send(FulfillPooledTransactionsRequest(msg));
            stopwatch.Stop();
            if (Logger.IsTrace)
            {
                Logger.Trace($"OUT {Counter:D5} {nameof(GetPooledTransactionsMessage)} to {Node:c} " +
                             $"in {stopwatch.Elapsed.TotalMilliseconds}ms");
            }
        }
        protected PooledTransactionsMessage FulfillPooledTransactionsRequest(
            GetPooledTransactionsMessage msg)
        {
            List <Transaction> txs = new();
            int responseSize       = Math.Min(256, msg.Hashes.Count);

            for (int i = 0; i < responseSize; i++)
            {
                if (_txPool.TryGetPendingTransaction(msg.Hashes[i], out Transaction tx))
                {
                    txs.Add(tx);
                }
            }

            return(new PooledTransactionsMessage(txs));
        }
Esempio n. 4
0
        private void Handle(GetPooledTransactionsMessage msg)
        {
            Metrics.Eth65GetPooledTransactionsReceived++;

            Stopwatch          stopwatch = Stopwatch.StartNew();
            List <Transaction> txs       = new List <Transaction>();
            int responseSize             = Math.Min(256, msg.Hashes.Count);

            for (int i = 0; i < responseSize; i++)
            {
                if (_txPool.TryGetPendingTransaction(msg.Hashes[i], out Transaction tx))
                {
                    txs.Add(tx);
                }
            }

            Send(new PooledTransactionsMessage(txs));
            stopwatch.Stop();
            if (Logger.IsTrace)
            {
                Logger.Trace($"OUT {Counter:D5} GetPooledTransactionsMessage to {Node:c} in {stopwatch.Elapsed.TotalMilliseconds}ms");
            }
        }