core, light: send chain events using event.Feed (#14865)
This commit is contained in:
@ -45,6 +45,10 @@ import (
|
||||
const (
|
||||
softResponseLimit = 2 * 1024 * 1024 // Target maximum size of returned blocks, headers or node data.
|
||||
estHeaderRlpSize = 500 // Approximate size of an RLP encoded block header
|
||||
|
||||
// txChanSize is the size of channel listening to TxPreEvent.
|
||||
// The number is referenced from the size of tx pool.
|
||||
txChanSize = 4096
|
||||
)
|
||||
|
||||
var (
|
||||
@ -78,7 +82,8 @@ type ProtocolManager struct {
|
||||
SubProtocols []p2p.Protocol
|
||||
|
||||
eventMux *event.TypeMux
|
||||
txSub *event.TypeMuxSubscription
|
||||
txCh chan core.TxPreEvent
|
||||
txSub event.Subscription
|
||||
minedBlockSub *event.TypeMuxSubscription
|
||||
|
||||
// channels for fetcher, syncer, txsyncLoop
|
||||
@ -200,7 +205,8 @@ func (pm *ProtocolManager) removePeer(id string) {
|
||||
|
||||
func (pm *ProtocolManager) Start() {
|
||||
// broadcast transactions
|
||||
pm.txSub = pm.eventMux.Subscribe(core.TxPreEvent{})
|
||||
pm.txCh = make(chan core.TxPreEvent, txChanSize)
|
||||
pm.txSub = pm.txpool.SubscribeTxPreEvent(pm.txCh)
|
||||
go pm.txBroadcastLoop()
|
||||
// broadcast mined blocks
|
||||
pm.minedBlockSub = pm.eventMux.Subscribe(core.NewMinedBlockEvent{})
|
||||
@ -724,10 +730,15 @@ func (self *ProtocolManager) minedBroadcastLoop() {
|
||||
}
|
||||
|
||||
func (self *ProtocolManager) txBroadcastLoop() {
|
||||
// automatically stops if unsubscribe
|
||||
for obj := range self.txSub.Chan() {
|
||||
event := obj.Data.(core.TxPreEvent)
|
||||
self.BroadcastTx(event.Tx.Hash(), event.Tx)
|
||||
for {
|
||||
select {
|
||||
case event := <-self.txCh:
|
||||
self.BroadcastTx(event.Tx.Hash(), event.Tx)
|
||||
|
||||
// Err() channel will be closed when unsubscribing.
|
||||
case <-self.txSub.Err():
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user