|
|
- package txindex
-
- import (
- "context"
-
- "github.com/tendermint/tendermint/types"
- cmn "github.com/tendermint/tmlibs/common"
- )
-
- const (
- subscriber = "IndexerService"
- )
-
- type IndexerService struct {
- cmn.BaseService
-
- idr TxIndexer
- eventBus *types.EventBus
- }
-
- func NewIndexerService(idr TxIndexer, eventBus *types.EventBus) *IndexerService {
- is := &IndexerService{idr: idr, eventBus: eventBus}
- is.BaseService = *cmn.NewBaseService(nil, "IndexerService", is)
- return is
- }
-
- // OnStart implements cmn.Service by subscribing for all transactions
- // and indexing them by tags.
- func (is *IndexerService) OnStart() error {
- ch := make(chan interface{})
- if err := is.eventBus.Subscribe(context.Background(), subscriber, types.EventQueryTx, ch); err != nil {
- return err
- }
- go func() {
- for event := range ch {
- // TODO: may be not perfomant to write one event at a time
- txResult := event.(types.TMEventData).Unwrap().(types.EventDataTx).TxResult
- is.idr.Index(&txResult)
- }
- }()
- return nil
- }
-
- // OnStop implements cmn.Service by unsubscribing from all transactions.
- func (is *IndexerService) OnStop() {
- if is.eventBus.IsRunning() {
- _ = is.eventBus.UnsubscribeAll(context.Background(), subscriber)
- }
- }
|