private void receivedTransactionMessage(string address, int port, TxsMsg msg) { foreach (var tx in msg.Transactions) { if (this.txsInSynchronizing.ContainsKey(tx.Hash)) { txsInSynchronizing.Remove(tx.Hash); } if (this.newTxInDownloading.Contains(tx.Hash)) { var nodes = this.p2pComponent.GetNodes(); //Broadcast to other node foreach (var node in nodes) { if (node.IsConnected && !node.IsTrackerServer && node.IP != address) { var payload = new NewTxMsg(); payload.Hash = tx.Hash; var cmd = P2PCommand.CreateCommand(CommandNames.Transaction.NewTx, payload); this.p2pComponent.SendCommand(node.IP, node.Port, cmd); } } newTxInDownloading.Remove(tx.Hash); } this.txComponent.AddTransactionToPool(tx); } }
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); } } }
public void BroadcastNewTransactionMessage(string txHash) { var nodes = this.p2pComponent.GetNodes(); //Broadcast to other node foreach (var node in nodes) { if (node.IsConnected && !node.IsTrackerServer) { var payload = new NewTxMsg(); payload.Hash = txHash; var cmd = P2PCommand.CreateCommand(CommandNames.Transaction.NewTx, payload); this.p2pComponent.SendCommand(node.IP, node.Port, cmd); } } }
//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; } }