Example #1
0
        private void receivedGetTransaction(string address, int port, GetTxsMsg msg, int nonce)
        {
            if (!GlobalParameters.IsPool)
            {
                var txList = new List <TransactionMsg>();

                foreach (var hash in msg.Hashes)
                {
                    var tx = this.txComponent.GetTransactionMsgByHash(hash);

                    if (tx != null)
                    {
                        txList.Add(tx);
                    }
                }

                if (txList.Count > 0)
                {
                    var payload = new TxsMsg();
                    payload.Transactions.AddRange(txList);

                    var cmd = P2PCommand.CreateCommand(this.Identity.ToString(), CommandNames.Transaction.Tx, payload);
                    this.p2pComponent.SendCommand(address, port, cmd);
                }
                else
                {
                    this.sendDataNoFoundCommand(address, port, nonce);
                }
            }
        }
Example #2
0
        private void receivedGetTransaction(string address, int port, GetTxsMsg msg, int nonce)
        {
            var txList = new List <TransactionMsg>();

            foreach (var hash in msg.Hashes)
            {
                var tx = this.txComponent.GetTransactionMsgFromPool(hash);

                LogHelper.Info("Get Transaction:" + hash + ":" + tx == null ? "Not found" : "be found");

                if (tx != null)
                {
                    txList.Add(tx);
                }
            }

            if (txList.Count > 0)
            {
                var payload = new TxsMsg();
                payload.Transactions.AddRange(txList);

                var cmd = P2PCommand.CreateCommand(CommandNames.Transaction.Tx, payload);
                this.p2pComponent.SendCommand(address, port, cmd);
            }
            else
            {
                this.sendDataNoFoundCommand(address, port, nonce);
            }
        }
Example #3
0
        private void sendGetTransaction(string address, int port, List <string> txHashList)
        {
            for (int i = txHashList.Count - 1; i >= 0; i--)
            {
                var hash = txHashList[i];

                if (this.txsInSynchronizing.ContainsKey(hash))
                {
                    if (Time.EpochTime - this.txsInSynchronizing[hash] > 60 * 1000)
                    {
                        txsInSynchronizing[hash] = Time.EpochTime;
                    }
                    else
                    {
                        txHashList.RemoveAt(i);
                    }
                }
                else
                {
                    txsInSynchronizing.Add(hash, Time.EpochTime);
                }
            }

            var payload = new GetTxsMsg();

            payload.Hashes.AddRange(txHashList);

            var cmd = P2PCommand.CreateCommand(CommandNames.Transaction.GetTx, payload);

            p2pComponent.SendCommand(address, port, cmd);
        }
Example #4
0
        private void receivedNewTransactionMessage(string address, int port, NewTxMsg msg)
        {
            if (!this.txComponent.CheckBlackTxExisted(msg.Hash) && !this.txComponent.CheckTxExisted(msg.Hash))
            {
                if (!this.newTxInDownloading.Contains(msg.Hash))
                {
                    newTxInDownloading.Add(msg.Hash);

                    var payload = new GetTxsMsg();
                    payload.Hashes.Add(msg.Hash);

                    var cmd = P2PCommand.CreateCommand(this.Identity.ToString(), CommandNames.Transaction.GetTx, payload);
                    this.p2pComponent.SendCommand(address, port, cmd);
                }
            }
        }
Example #5
0
        private void sendGetTransaction(string address, int port, List <string> txHashList)
        {
            if (RemoteLatestHeight - GlobalParameters.LocalHeight > 10)
            {
                return;
            }

            for (int i = txHashList.Count - 1; i >= 0; i--)
            {
                var hash = txHashList[i];

                if (this.txsInSynchronizing.ContainsKey(hash))
                {
                    if (Time.EpochTime - this.txsInSynchronizing[hash] > 60 * 1000 && !this.txComponent.CheckBlackTxExisted(hash))
                    {
                        txsInSynchronizing[hash] = Time.EpochTime;
                    }
                    else
                    {
                        txHashList.RemoveAt(i);
                    }
                }
                else
                {
                    if (!this.txComponent.CheckBlackTxExisted(hash))
                    {
                        txsInSynchronizing.Add(hash, Time.EpochTime);
                    }
                    else
                    {
                        txHashList.RemoveAt(i);
                    }
                }
            }

            if (txHashList.Count > 0)
            {
                var payload = new GetTxsMsg();
                payload.Hashes.AddRange(txHashList);

                var cmd = P2PCommand.CreateCommand(this.Identity.ToString(), CommandNames.Transaction.GetTx, payload);
                p2pComponent.SendCommand(address, port, cmd);
            }
        }
Example #6
0
        //private void processLongTimeCommand()
        //{
        //    LogHelper.Warn("Thread : In to thread threadProcessLongTimeCommand's process action : processLongTimeCommand");
        //    P2PState state = default(P2PState);

        //    //System.Diagnostics.Stopwatch stopwatch = new System.Diagnostics.Stopwatch();
        //    while (this.isRunning)
        //    {
        //        if (longTimeCommandQueue.TryDequeue(out state))
        //        {
        //            if(state != null)
        //            {
        //                try
        //                {
        //                    //stopwatch.Reset();
        //                    //stopwatch.Start();
        //                    int index = 0;
        //                    switch (state.Command.CommandName)
        //                    {
        //                        case CommandNames.Block.GetHeaders:
        //                            var getHeadersMsg = new GetHeadersMsg();
        //                            getHeadersMsg.Deserialize(state.Command.Payload, ref index);
        //                            this.receivedGetHeaders(state.IP, state.Port, getHeadersMsg, state.Command.Nonce);
        //                            break;
        //                        case CommandNames.Block.GetBlocks:
        //                            var getBlocksMsg = new GetBlocksMsg();
        //                            getBlocksMsg.Deserialize(state.Command.Payload, ref index);
        //                            this.receivedGetBlocks(state.IP, state.Port, getBlocksMsg, state.Command.Nonce);
        //                            break;
        //                        default:
        //                            break;
        //                    }
        //                    //stopwatch.Stop();
        //                    //LogHelper.Warn($"processLongTimeCommand : {state.Command.CommandName}  -- {stopwatch.ElapsedMilliseconds}  , longTimeCommandQueue count = {longTimeCommandQueue.Count()}" );

        //                }
        //                catch (Exception ex)
        //                {
        //                    LogHelper.Error(ex.ToString());
        //                    //LogHelper.Warn($"processLongTimeCommand : {state.Command.CommandName}  -- {stopwatch.ElapsedMilliseconds}  , longTimeCommandQueue count = {longTimeCommandQueue.Count()} -- Exception msg: {ex.ToString()} ");
        //                }

        //            }
        //            Thread.Sleep(10);
        //        }
        //        else
        //        {
        //            Thread.Sleep(50);
        //        }

        //    }
        //    LogHelper.Warn("Thread : out of thread threadProcessLongTimeCommand's process action : processLongTimeCommand");
        //}

        #endregion

        private void dataReceived(P2PState state)
        {
            int index = 0;

            switch (state.Command.CommandName)
            {
            case CommandNames.Transaction.GetTxPool:
                this.receivedGetTransactionPool(state.IP, state.Port, state.Command.Nonce);
                break;

            case CommandNames.Transaction.TxPool:
                var txPoolMsg = new TxPoolMsg();
                txPoolMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedTransacitonPoolMessage(state.IP, state.Port, txPoolMsg);
                break;

            case CommandNames.Transaction.GetTx:
                var getTxMsg = new GetTxsMsg();
                getTxMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedGetTransaction(state.IP, state.Port, getTxMsg, state.Command.Nonce);
                break;

            case CommandNames.Transaction.Tx:
                var txsMsg = new TxsMsg();
                txsMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedTransactionMessage(state.IP, state.Port, txsMsg);
                break;

            case CommandNames.Transaction.NewTx:
                var newTxMsg = new NewTxMsg();
                newTxMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedNewTransactionMessage(state.IP, state.Port, newTxMsg);
                break;

            case CommandNames.Block.GetHeight:
                this.receivedGetHeight(state.IP, state.Port, state.Command.Nonce);
                break;

            case CommandNames.Block.Height:
                var heightMsg = new HeightMsg();
                heightMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedHeightMessage(state.IP, state.Port, heightMsg);
                break;

            case CommandNames.Block.GetHeaders:
                var getHeadersMsg = new GetHeadersMsg();
                getHeadersMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedGetHeaders(state.IP, state.Port, getHeadersMsg, state.Command.Nonce);
                //longTimeCommandQueue.Enqueue(state);
                break;

            case CommandNames.Block.Headers:
                var headersMsg = new HeadersMsg();
                headersMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedHeadersMessage(state.IP, state.Port, headersMsg);
                break;

            case CommandNames.Block.GetBlocks:
                var getBlocksMsg = new GetBlocksMsg();
                getBlocksMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedGetBlocks(state.IP, state.Port, getBlocksMsg, state.Command.Nonce);
                //longTimeCommandQueue.Enqueue(state);
                break;

            case CommandNames.Block.Blocks:
                var blocksMsg = new BlocksMsg();
                blocksMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedBlocksMessage(state.IP, state.Port, blocksMsg);
                break;

            case CommandNames.Block.NewBlock:
                var newBlockMsg = new NewBlockMsg();
                newBlockMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedNewBlockMessage(state.IP, state.Port, newBlockMsg, state.Command.Nonce);
                break;

            case CommandNames.MiningPool.GetMiningPools:
                this.receivedGetMiningPoolsMessage(state.IP, state.Port);
                break;

            case CommandNames.MiningPool.MiningPools:
                var miningPoolMsg = new MiningPoolMsg();
                miningPoolMsg.Deserialize(state.Command.Payload, ref index);
                receivedMiningPoolsMessage(miningPoolMsg);
                break;

            case CommandNames.MiningPool.NewMiningPool:
                var newMiningPoolMsg = new NewMiningPoolMsg();
                newMiningPoolMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedNewMiningPoolMessage(state, newMiningPoolMsg);
                break;

            case CommandNames.Other.Reject:
            case CommandNames.Other.NotFound:
            default:
                break;
            }
        }
Example #7
0
        private void dataReceived(P2PState state)
        {
            int index = 0;

            switch (state.Command.CommandName)
            {
            //case CommandNames.P2P.GetAddr:
            //    this.getAddrMsgHandle(state);
            //    break;
            //case CommandNames.P2P.Addr:
            //    this.addrMsgHandle(state);
            //    break;
            //case CommandNames.P2P.Heartbeat:
            //    this.heartbeatMsgHandle(state);
            //    break;
            case CommandNames.Transaction.GetTxPool:
                this.receivedGetTransactionPool(state.IP, state.Port, state.Command.Nonce);
                break;

            case CommandNames.Transaction.TxPool:
                var txPoolMsg = new TxPoolMsg();
                txPoolMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedTransacitonPoolMessage(state.IP, state.Port, txPoolMsg);
                break;

            case CommandNames.Transaction.GetTx:
                var getTxMsg = new GetTxsMsg();
                getTxMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedGetTransaction(state.IP, state.Port, getTxMsg, state.Command.Nonce);
                break;

            case CommandNames.Transaction.Tx:
                var txsMsg = new TxsMsg();
                txsMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedTransactionMessage(state.IP, state.Port, txsMsg);
                break;

            case CommandNames.Transaction.NewTx:
                var newTxMsg = new NewTxMsg();
                newTxMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedNewTransactionMessage(state.IP, state.Port, newTxMsg);
                break;

            case CommandNames.Block.GetHeight:
                this.receivedGetHeight(state.IP, state.Port, state.Command.Nonce);
                break;

            case CommandNames.Block.Height:
                var heightMsg = new HeightMsg();
                heightMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedHeightMessage(state.IP, state.Port, heightMsg);
                break;

            case CommandNames.Block.GetHeaders:
                var getHeadersMsg = new GetHeadersMsg();
                getHeadersMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedGetHeaders(state.IP, state.Port, getHeadersMsg, state.Command.Nonce);
                break;

            case CommandNames.Block.Headers:
                var headersMsg = new HeadersMsg();
                headersMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedHeadersMessage(state.IP, state.Port, headersMsg);
                break;

            case CommandNames.Block.GetBlocks:
                var getBlocksMsg = new GetBlocksMsg();
                getBlocksMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedGetBlocks(state.IP, state.Port, getBlocksMsg, state.Command.Nonce);
                break;

            case CommandNames.Block.Blocks:
                var blocksMsg = new BlocksMsg();
                blocksMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedBlocksMessage(state.IP, state.Port, blocksMsg);
                break;

            case CommandNames.Block.NewBlock:
                var newBlockMsg = new NewBlockMsg();
                newBlockMsg.Deserialize(state.Command.Payload, ref index);
                this.receivedNewBlockMessage(state.IP, state.Port, newBlockMsg, state.Command.Nonce);
                break;

            case CommandNames.Other.Reject:

                break;

            case CommandNames.Other.NotFound:
                break;

            default:
                break;
            }
        }