private void receivedTransacitonPoolMessage(string address, int port, TxPoolMsg msg) { if (this.syncManager.TaskCount == 0 || (this.RemoteLatestHeight > -1 && this.RemoteLatestHeight - this.LocalHeight <= 10)) { var txHashes = new List <string>(); LogHelper.Debug("TxPool Hashes Count:" + msg.Hashes.Count); foreach (var h in msg.Hashes) { if (txHashes.Count > 10) { this.sendGetTransaction(address, port, txHashes); txHashes.Clear(); } if (!this.txComponent.CheckBlackTxExisted(h) && !this.txComponent.CheckTxExisted(h)) { txHashes.Add(h); } } if (txHashes.Count > 0) { this.sendGetTransaction(address, port, txHashes); } } }
private void receivedGetTransactionPool(string address, int port, int nonce) { var hashes = this.txComponent.GetAllHashesFromPool(); var payload = new TxPoolMsg(); payload.Hashes.AddRange(hashes); var cmd = P2PCommand.CreateCommand(CommandNames.Transaction.TxPool, nonce, payload); this.p2pComponent.SendCommand(address, port, cmd); }
private void receivedTransacitonPoolMessage(string address, int port, TxPoolMsg msg) { var txHashes = new List <string>(); foreach (var h in msg.Hashes) { if (!this.txComponent.CheckTxExisted(h)) { txHashes.Add(h); } } if (txHashes.Count > 0) { this.sendGetTransaction(address, port, txHashes); } }
//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; } }
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; } }