forked from cerc-io/plugeth
Added a secondary processor
This commit is contained in:
parent
c66cf95b40
commit
f5737b929a
@ -34,6 +34,10 @@ type PublicSpeaker interface {
|
||||
Broadcast(msgType ethwire.MsgType, data []interface{})
|
||||
}
|
||||
|
||||
type TxProcessor interface {
|
||||
ProcessTransaction(tx *Transaction)
|
||||
}
|
||||
|
||||
// The tx pool a thread safe transaction pool handler. In order to
|
||||
// guarantee a non blocking pool we use a queue channel which can be
|
||||
// independently read without needing access to the actual pool. If the
|
||||
@ -54,7 +58,7 @@ type TxPool struct {
|
||||
|
||||
BlockManager *BlockManager
|
||||
|
||||
Hook TxPoolHook
|
||||
SecondaryProcessor TxProcessor
|
||||
}
|
||||
|
||||
func NewTxPool() *TxPool {
|
||||
@ -69,12 +73,14 @@ func NewTxPool() *TxPool {
|
||||
|
||||
// Blocking function. Don't use directly. Use QueueTransaction instead
|
||||
func (pool *TxPool) addTransaction(tx *Transaction) {
|
||||
log.Println("Adding tx to pool")
|
||||
pool.mutex.Lock()
|
||||
pool.pool.PushBack(tx)
|
||||
pool.mutex.Unlock()
|
||||
|
||||
// Broadcast the transaction to the rest of the peers
|
||||
pool.Speaker.Broadcast(ethwire.MsgTxTy, []interface{}{tx.RlpData()})
|
||||
log.Println("broadcasting it")
|
||||
}
|
||||
|
||||
// Process transaction validates the Tx and processes funds from the
|
||||
@ -179,8 +185,8 @@ out:
|
||||
// doesn't matter since this is a goroutine
|
||||
pool.addTransaction(tx)
|
||||
|
||||
if pool.Hook != nil {
|
||||
pool.Hook <- tx
|
||||
if pool.SecondaryProcessor != nil {
|
||||
pool.SecondaryProcessor.ProcessTransaction(tx)
|
||||
}
|
||||
}
|
||||
case <-pool.quit:
|
||||
|
Loading…
Reference in New Issue
Block a user