bitxhub/internal/app/feedhub.go

54 lines
1.2 KiB
Go
Raw Normal View History

2020-03-29 21:32:01 +08:00
package app
import (
"context"
"github.com/meshplus/bitxhub/internal/model/events"
"github.com/sirupsen/logrus"
)
func (bxh *BitXHub) start() {
go bxh.listenEvent()
go func() {
for {
select {
case block := <-bxh.Order.Commit():
bxh.logger.WithFields(logrus.Fields{
"height": block.BlockHeader.Number,
"count": len(block.Transactions),
}).Info("Generated block")
bxh.BlockExecutor.ExecuteBlock(block)
2020-12-07 21:48:47 +08:00
case <-bxh.Ctx.Done():
2020-03-29 21:32:01 +08:00
return
}
}
}()
}
func (bxh *BitXHub) listenEvent() {
blockCh := make(chan events.ExecutedEvent)
2020-03-29 21:32:01 +08:00
orderMsgCh := make(chan events.OrderMessageEvent)
blockSub := bxh.BlockExecutor.SubscribeBlockEvent(blockCh)
2020-03-29 21:32:01 +08:00
orderMsgSub := bxh.PeerMgr.SubscribeOrderMessage(orderMsgCh)
defer blockSub.Unsubscribe()
defer orderMsgSub.Unsubscribe()
for {
select {
case ev := <-blockCh:
go bxh.Order.ReportState(ev.Block.BlockHeader.Number, ev.Block.BlockHash)
go bxh.Router.PutBlockAndMeta(ev.Block, ev.InterchainMeta)
2020-03-29 21:32:01 +08:00
case ev := <-orderMsgCh:
go func() {
if err := bxh.Order.Step(context.Background(), ev.Data); err != nil {
bxh.logger.Error(err)
}
}()
2020-12-07 21:48:47 +08:00
case <-bxh.Ctx.Done():
2020-03-29 21:32:01 +08:00
return
}
}
}