github.com/sixexorg/magnetic-ring@v0.0.0-20191119090307-31705a21e419/txpool/mainchain/txpool_actor.go (about)

     1  package mainchain
     2  
     3  import (
     4  	"reflect"
     5  
     6  	"github.com/ontio/ontology-eventbus/actor"
     7  	"github.com/sixexorg/magnetic-ring/bactor"
     8  	"github.com/sixexorg/magnetic-ring/common"
     9  	"github.com/sixexorg/magnetic-ring/log"
    10  )
    11  
    12  type TxPoolActor struct {
    13  	txnpool *TxPool
    14  }
    15  
    16  func (this *TxPoolActor) setPool(s *TxPool) {
    17  	this.txnpool = s
    18  }
    19  
    20  func NewTxActor(s *TxPool) *TxPoolActor {
    21  	actor := &TxPoolActor{}
    22  	actor.setPool(s)
    23  
    24  	return actor
    25  }
    26  
    27  func (tpa *TxPoolActor) Receive(context actor.Context) {
    28  	switch msg := context.Message().(type) {
    29  	case TxReq:
    30  
    31  		log.Debug("magnetic actor receive transaction", "tx", msg.Tx.Hash())
    32  
    33  		err := tpa.txnpool.TxEnqueue(msg.Tx)
    34  		resp := TxResp{}
    35  		empt := common.Hash{}
    36  		if err != nil {
    37  			resp.Hash = empt.String()
    38  			resp.Desc = err.Error()
    39  			if msg.RespChan != nil {
    40  				msg.RespChan <- &resp
    41  			}
    42  			return
    43  		}
    44  
    45  		log.Debug("txpool_actor keep msg", "txhash", msg.Tx.Hash())
    46  
    47  		resp.Hash = empt.String()
    48  		resp.Desc = ""
    49  
    50  		if msg.RespChan != nil {
    51  			msg.RespChan <- &resp
    52  		}
    53  
    54  	case bactor.HeightChange:
    55  		log.Info("func txpool Receive", "oldTargetHeight", tpa.txnpool.stateValidator.TargetHeight, "txlen", tpa.txnpool.stateValidator.GetTxLen())
    56  		tpa.txnpool.RefreshValidator()
    57  
    58  	case MustPackTxsReq:
    59  		tpa.txnpool.AppendMustPackTx(msg.Txs...)
    60  
    61  	default:
    62  		log.Info("txpool_actor.go txpool-tx actor: unknown msg", "msg", msg, "type", reflect.TypeOf(msg))
    63  	}
    64  }