ipld-eth-server/pkg/blockchain_listener/blockchain_listener.go
2017-11-06 13:06:03 -06:00

38 lines
959 B
Go

package blockchain_listener
import "github.com/8thlight/vulcanizedb/pkg/core"
type BlockchainListener struct {
inputBlocks chan core.Block
blockchain core.Blockchain
observers []core.BlockchainObserver
}
func NewBlockchainListener(blockchain core.Blockchain, observers []core.BlockchainObserver) BlockchainListener {
inputBlocks := make(chan core.Block, 10)
blockchain.SubscribeToBlocks(inputBlocks)
listener := BlockchainListener{
inputBlocks: inputBlocks,
blockchain: blockchain,
observers: observers,
}
return listener
}
func (listener BlockchainListener) Start() {
go listener.blockchain.StartListening()
for block := range listener.inputBlocks {
listener.notifyObservers(block)
}
}
func (listener BlockchainListener) notifyObservers(block core.Block) {
for _, observer := range listener.observers {
observer.NotifyBlockAdded(block)
}
}
func (listener BlockchainListener) Stop() {
listener.blockchain.StopListening()
}