Register listeners for MainData / MinerData updates
This commit is contained in:
parent
52b2d617c0
commit
a2b701e87b
|
@ -43,6 +43,8 @@ type P2PoolInterface interface {
|
|||
ClientZMQ() *zmq.Client
|
||||
Context() context.Context
|
||||
Started() bool
|
||||
UpdateMainData(data *sidechain.ChainMain)
|
||||
UpdateMinerData(data *p2pooltypes.MinerData)
|
||||
UpdateBlockFound(data *sidechain.ChainMain, block *sidechain.PoolBlock)
|
||||
}
|
||||
|
||||
|
@ -289,6 +291,8 @@ func (c *MainChain) HandleChainMain(mainData *sidechain.ChainMain, extra []byte)
|
|||
c.updateMedianTimestamp()
|
||||
}()
|
||||
|
||||
c.p2pool.UpdateMainData(mainData)
|
||||
|
||||
var tags transaction.ExtraTags
|
||||
if err := tags.UnmarshalBinary(extra); err != nil {
|
||||
return
|
||||
|
@ -478,6 +482,8 @@ func (c *MainChain) HandleMinerData(minerData *p2pooltypes.MinerData) {
|
|||
}
|
||||
}()
|
||||
|
||||
c.p2pool.UpdateMinerData(minerData)
|
||||
|
||||
var wg sync.WaitGroup
|
||||
for _, h := range missingHeights {
|
||||
wg.Add(1)
|
||||
|
|
|
@ -32,6 +32,8 @@ type EventListener struct {
|
|||
Tip func(tip *sidechain.PoolBlock)
|
||||
Broadcast func(b *sidechain.PoolBlock)
|
||||
Found func(data *sidechain.ChainMain, b *sidechain.PoolBlock)
|
||||
MainData func(data *sidechain.ChainMain)
|
||||
MinerData func(data *p2pooltypes.MinerData)
|
||||
}
|
||||
|
||||
type P2Pool struct {
|
||||
|
@ -59,17 +61,21 @@ type P2Pool struct {
|
|||
closed chan struct{}
|
||||
}
|
||||
|
||||
func (p *P2Pool) AddListener(tip func(tip *sidechain.PoolBlock), broadcast func(b *sidechain.PoolBlock), found func(data *sidechain.ChainMain, b *sidechain.PoolBlock)) uint64 {
|
||||
// AddListener Registers listener to several events produced centrally.
|
||||
// Note that you should process events called as fast as possible, or spawn a new goroutine to not block
|
||||
func (p *P2Pool) AddListener(tip func(tip *sidechain.PoolBlock), broadcast func(b *sidechain.PoolBlock), found func(data *sidechain.ChainMain, b *sidechain.PoolBlock), mainData func(data *sidechain.ChainMain), minerData func(data *p2pooltypes.MinerData)) (listenerId uint64) {
|
||||
p.listenersLock.Lock()
|
||||
p.listenersLock.Unlock()
|
||||
|
||||
listenerId := p.nextListenerId
|
||||
listenerId = p.nextListenerId
|
||||
p.nextListenerId++
|
||||
p.listeners = append(p.listeners, EventListener{
|
||||
ListenerId: listenerId,
|
||||
Tip: tip,
|
||||
Broadcast: broadcast,
|
||||
Found: found,
|
||||
MainData: mainData,
|
||||
MinerData: minerData,
|
||||
})
|
||||
return listenerId
|
||||
}
|
||||
|
@ -485,6 +491,26 @@ func (p *P2Pool) Consensus() *sidechain.Consensus {
|
|||
return p.consensus
|
||||
}
|
||||
|
||||
func (p *P2Pool) UpdateMainData(data *sidechain.ChainMain) {
|
||||
p.listenersLock.RLock()
|
||||
defer p.listenersLock.RUnlock()
|
||||
for i := range p.listeners {
|
||||
if p.listeners[i].MainData != nil {
|
||||
p.listeners[i].MainData(data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (p *P2Pool) UpdateMinerData(data *p2pooltypes.MinerData) {
|
||||
p.listenersLock.RLock()
|
||||
defer p.listenersLock.RUnlock()
|
||||
for i := range p.listeners {
|
||||
if p.listeners[i].MinerData != nil {
|
||||
p.listeners[i].MinerData(data)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (p *P2Pool) UpdateBlockFound(data *sidechain.ChainMain, block *sidechain.PoolBlock) {
|
||||
log.Printf("[P2Pool] BLOCK FOUND: main chain block at height %d, id %s was mined by this p2pool", data.Height, data.Id)
|
||||
|
||||
|
|
Loading…
Reference in a new issue