aboutsummaryrefslogtreecommitdiffstats
path: root/eth/backend.go
diff options
context:
space:
mode:
authorobscuren <geffobscura@gmail.com>2014-12-15 19:08:10 +0800
committerobscuren <geffobscura@gmail.com>2014-12-15 19:17:33 +0800
commitcdb2ebbdfa510294b8443e33c32f9e0ec414f78e (patch)
tree6f14fbe9f5042cc1ce0b6567e0a1a77d43284766 /eth/backend.go
parent4b5ad31b3ab8e1370233be6479e7476bc0019080 (diff)
downloadgo-tangerine-cdb2ebbdfa510294b8443e33c32f9e0ec414f78e.tar.gz
go-tangerine-cdb2ebbdfa510294b8443e33c32f9e0ec414f78e.tar.zst
go-tangerine-cdb2ebbdfa510294b8443e33c32f9e0ec414f78e.zip
Added old filter. Needs some refactoring
Diffstat (limited to 'eth/backend.go')
-rw-r--r--eth/backend.go63
1 files changed, 6 insertions, 57 deletions
diff --git a/eth/backend.go b/eth/backend.go
index 5b7dc6435..fb401a68d 100644
--- a/eth/backend.go
+++ b/eth/backend.go
@@ -14,7 +14,6 @@ import (
"github.com/ethereum/go-ethereum/p2p"
"github.com/ethereum/go-ethereum/pow/ezp"
"github.com/ethereum/go-ethereum/rpc"
- "github.com/ethereum/go-ethereum/state"
"github.com/ethereum/go-ethereum/whisper"
)
@@ -75,7 +74,6 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke
clientIdentity: identity,
blacklist: p2p.NewBlacklist(),
eventMux: &event.TypeMux{},
- filters: make(map[int]*core.Filter),
}
eth.txPool = core.NewTxPool(eth)
@@ -83,6 +81,7 @@ func New(db ethutil.Database, identity p2p.ClientIdentity, keyManager *crypto.Ke
eth.blockManager = core.NewBlockManager(eth)
eth.chainManager.SetProcessor(eth.blockManager)
eth.whisper = whisper.New()
+ eth.filterManager = filter.NewFilterManager(eth.EventMux())
hasBlock := eth.chainManager.HasBlock
insertChain := eth.chainManager.InsertChain
@@ -164,8 +163,7 @@ func (s *Ethereum) Start(seed bool) error {
}
s.blockPool.Start()
s.whisper.Start()
-
- go s.filterLoop()
+ s.filterManager.Start()
// broadcast transactions
s.txSub = s.eventMux.Subscribe(core.TxPreEvent{})
@@ -267,58 +265,9 @@ func saveProtocolVersion(db ethutil.Database) {
}
}
-// InstallFilter adds filter for blockchain events.
-// The filter's callbacks will run for matching blocks and messages.
-// The filter should not be modified after it has been installed.
+// XXX Refactor me & MOVE
func (self *Ethereum) InstallFilter(filter *core.Filter) (id int) {
- self.filterMu.Lock()
- id = self.filterId
- self.filters[id] = filter
- self.filterId++
- self.filterMu.Unlock()
- return id
-}
-
-func (self *Ethereum) UninstallFilter(id int) {
- self.filterMu.Lock()
- delete(self.filters, id)
- self.filterMu.Unlock()
-}
-
-// GetFilter retrieves a filter installed using InstallFilter.
-// The filter may not be modified.
-func (self *Ethereum) GetFilter(id int) *core.Filter {
- self.filterMu.RLock()
- defer self.filterMu.RUnlock()
- return self.filters[id]
-}
-
-func (self *Ethereum) filterLoop() {
- // Subscribe to events
- events := self.eventMux.Subscribe(core.NewBlockEvent{}, state.Messages(nil))
- for event := range events.Chan() {
- switch event.(type) {
- case core.NewBlockEvent:
- self.filterMu.RLock()
- for _, filter := range self.filters {
- if filter.BlockCallback != nil {
- e := event.(core.NewBlockEvent)
- filter.BlockCallback(e.Block)
- }
- }
- self.filterMu.RUnlock()
- case state.Messages:
- self.filterMu.RLock()
- for _, filter := range self.filters {
- if filter.MessageCallback != nil {
- e := event.(state.Messages)
- msgs := filter.FilterMessages(e)
- if len(msgs) > 0 {
- filter.MessageCallback(msgs)
- }
- }
- }
- self.filterMu.RUnlock()
- }
- }
+ return self.filterManager.InstallFilter(filter)
}
+func (self *Ethereum) UninstallFilter(id int) { self.filterManager.UninstallFilter(id) }
+func (self *Ethereum) GetFilter(id int) *core.Filter { return self.filterManager.GetFilter(id) }