private void HandleTransactionData(IAsyncResult ar) { var state = (StateObject)ar.AsyncState; try { using (var scope = _serviceProvider.CreateScope()) { Transaction transaction = state.Transaction; transaction.Id = 0; transaction.Input.Id = 0; transaction.Outputs.ForEach(o => o.Id = 0); _transactionPoolService = scope.ServiceProvider.GetService <TransactionPoolService>(); _transactionPoolService.UpdateOrAddTransaction(transaction); Console.WriteLine("Received Transaction : "); Console.WriteLine(Encoding.UTF8.GetString(state.buffer)); } } finally { messageManualReset.Set(); state.workSocket.EndReceive(ar); } }
private void BlockchainMessageHandler(Socket socket) { Task.Run(() => { while (true) { messageManualReset.Reset(); StateObject state = new StateObject { workSocket = socket }; byte[] messageType = new byte[1]; socket.Receive(messageType); AsyncCallback handler = HandleTransactionData; if ((MessageType)messageType.First() == MessageType.Blockchain) { handler = HandleBlockchainData; } else if ((MessageType)messageType.First() == MessageType.Transaction) { handler = HandleTransactionData; } else if ((MessageType)messageType.First() == MessageType.ClearTransaction) { using (var scope = _serviceProvider.CreateScope()) { _transactionPoolService = scope.ServiceProvider.GetService <TransactionPoolService>(); _transactionPoolService.ClearPool(); messageManualReset.Set(); continue; } } byte[] bufferSize = new byte[4]; socket.Receive(bufferSize); //Little Endian state.BufferSize = BitConverter.ToInt32(bufferSize.Reverse().ToArray()); try { socket.BeginReceive(state.buffer, 0, state.BufferSize, SocketFlags.None, handler, state); } catch (Exception e) { throw e; } finally { messageManualReset.WaitOne(); } } }); }
public async Task IterationCleanup() { await _transactionManager.RemoveTransactionsAsync(_transactionIdList); await TransactionPoolService.CleanByTransactionIdsAsync(_transactionIdList); await TransactionPoolService.UpdateTransactionPoolByBestChainAsync(_chain.BestChainHash, _chain.BestChainHeight); _transactionIdList.Clear(); }
public async Task MineWithTxHubAsync() { var txCount = 0; var preBlockHash = _chain.BestChainHash; var preBlockHeight = _chain.BestChainHeight; while (txCount < TransactionCount) { var blockExecutedSet = await _minerService.MineAsync(preBlockHash, preBlockHeight, TimestampHelper.GetUtcNow(), TimestampHelper.DurationFromMilliseconds(4000)); txCount += blockExecutedSet.TransactionIds.Count(); _transactionIdList.AddRange(blockExecutedSet.TransactionIds.ToList()); await BlockchainService.SetBestChainAsync(_chain, preBlockHeight, preBlockHash); await TransactionPoolService.CleanByTransactionIdsAsync(blockExecutedSet.TransactionIds); await TransactionPoolService.UpdateTransactionPoolByBestChainAsync(preBlockHash, preBlockHeight); } }
private void HandleTransactionData(IAsyncResult ar) { var state = (StateObject)ar.AsyncState; try { Transaction transaction = state.Transaction; _transactionPoolService = _serviceProvider.GetService <TransactionPoolService>(); _transactionPoolService.UpdateOrAddTransaction(transaction); Console.WriteLine("Received Transaction : "); Console.WriteLine(Encoding.UTF8.GetString(state.buffer)); } finally { messageManualReset.Set(); state.workSocket.EndReceive(ar); } }
private async Task AddTransactionsToTxHub(int txCount) { var txList = await GenerateTransferTransactionsAsync(txCount); await TransactionPoolService.AddTransactionsAsync(txList); }