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

     1  package orgchain
     2  
     3  import (
     4  	"fmt"
     5  	"reflect"
     6  
     7  	"github.com/ontio/ontology-eventbus/actor"
     8  	"github.com/sixexorg/magnetic-ring/common"
     9  	"github.com/sixexorg/magnetic-ring/log"
    10  )
    11  
    12  type TxPoolActor struct {
    13  	txnpool *SubPool
    14  }
    15  
    16  func (this *TxPoolActor) setPool(s *SubPool) {
    17  	this.txnpool = s
    18  }
    19  
    20  func NewTxActor(s *SubPool) *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  		fmt.Println("📩 txpool actor receive")
    31  		log.Info("magnetic actor receive transaction", "tx", msg.Tx.Hash())
    32  
    33  		err := tpa.txnpool.TxEnqueue(msg.Tx)
    34  		resp := TxResp{}
    35  		if err != nil {
    36  			resp.Hash = common.Hash{}
    37  			resp.Desc = err.Error()
    38  			if msg.RespChan != nil {
    39  				msg.RespChan <- &resp
    40  			}
    41  			return
    42  		}
    43  
    44  		log.Info("txpool_actor keep msg", "txhash", msg.Tx.Hash())
    45  
    46  		resp.Hash = msg.Tx.Hash()
    47  		resp.Desc = ""
    48  		if msg.RespChan != nil {
    49  			msg.RespChan <- &resp
    50  		}
    51  
    52  	case MustPackTxsReq:
    53  		tpa.txnpool.AppendMustPackTx(msg.Txs...)
    54  
    55  	default:
    56  		log.Info("orgtxpoolactor.go txpool-tx actor: unknown msg", "msg", msg, "type", reflect.TypeOf(msg))
    57  	}
    58  }