diff options
author | obscuren <geffobscura@gmail.com> | 2014-07-07 16:53:25 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-07-07 16:53:25 +0800 |
commit | 9dab7dcc3c99d387ad2c0a1623b574d3023bdfae (patch) | |
tree | 8f98cce69568d29a954410e18dce8c121d25592e /ethutil | |
parent | d40cba3042564f3471aa20a5cf477cafcacc2189 (diff) | |
parent | b958179263aa1fa5060dd5d5848b8bb092a4165c (diff) | |
download | dexon-9dab7dcc3c99d387ad2c0a1623b574d3023bdfae.tar dexon-9dab7dcc3c99d387ad2c0a1623b574d3023bdfae.tar.gz dexon-9dab7dcc3c99d387ad2c0a1623b574d3023bdfae.tar.bz2 dexon-9dab7dcc3c99d387ad2c0a1623b574d3023bdfae.tar.lz dexon-9dab7dcc3c99d387ad2c0a1623b574d3023bdfae.tar.xz dexon-9dab7dcc3c99d387ad2c0a1623b574d3023bdfae.tar.zst dexon-9dab7dcc3c99d387ad2c0a1623b574d3023bdfae.zip |
Merge branch 'develop' of github.com-obscure:ethereum/eth-go into develop
Diffstat (limited to 'ethutil')
-rw-r--r-- | ethutil/reactor.go | 87 | ||||
-rw-r--r-- | ethutil/reactor_test.go | 30 |
2 files changed, 0 insertions, 117 deletions
diff --git a/ethutil/reactor.go b/ethutil/reactor.go deleted file mode 100644 index 7cf145245..000000000 --- a/ethutil/reactor.go +++ /dev/null @@ -1,87 +0,0 @@ -package ethutil - -import ( - "sync" -) - -type ReactorEvent struct { - mut sync.Mutex - event string - chans []chan React -} - -// Post the specified reactor resource on the channels -// currently subscribed -func (e *ReactorEvent) Post(react React) { - e.mut.Lock() - defer e.mut.Unlock() - - for _, ch := range e.chans { - go func(ch chan React) { - ch <- react - }(ch) - } -} - -// Add a subscriber to this event -func (e *ReactorEvent) Add(ch chan React) { - e.mut.Lock() - defer e.mut.Unlock() - - e.chans = append(e.chans, ch) -} - -// Remove a subscriber -func (e *ReactorEvent) Remove(ch chan React) { - e.mut.Lock() - defer e.mut.Unlock() - - for i, c := range e.chans { - if c == ch { - e.chans = append(e.chans[:i], e.chans[i+1:]...) - } - } -} - -// Basic reactor resource -type React struct { - Resource interface{} - Event string -} - -// The reactor basic engine. Acts as bridge -// between the events and the subscribers/posters -type ReactorEngine struct { - patterns map[string]*ReactorEvent -} - -func NewReactorEngine() *ReactorEngine { - return &ReactorEngine{patterns: make(map[string]*ReactorEvent)} -} - -// Subscribe a channel to the specified event -func (reactor *ReactorEngine) Subscribe(event string, ch chan React) { - ev := reactor.patterns[event] - // Create a new event if one isn't available - if ev == nil { - ev = &ReactorEvent{event: event} - reactor.patterns[event] = ev - } - - // Add the channel to reactor event handler - ev.Add(ch) -} - -func (reactor *ReactorEngine) Unsubscribe(event string, ch chan React) { - ev := reactor.patterns[event] - if ev != nil { - ev.Remove(ch) - } -} - -func (reactor *ReactorEngine) Post(event string, resource interface{}) { - ev := reactor.patterns[event] - if ev != nil { - ev.Post(React{Resource: resource, Event: event}) - } -} diff --git a/ethutil/reactor_test.go b/ethutil/reactor_test.go deleted file mode 100644 index 48c2f0df3..000000000 --- a/ethutil/reactor_test.go +++ /dev/null @@ -1,30 +0,0 @@ -package ethutil - -import "testing" - -func TestReactorAdd(t *testing.T) { - engine := NewReactorEngine() - ch := make(chan React) - engine.Subscribe("test", ch) - if len(engine.patterns) != 1 { - t.Error("Expected patterns to be 1, got", len(engine.patterns)) - } -} - -func TestReactorEvent(t *testing.T) { - engine := NewReactorEngine() - - // Buffer 1, so it doesn't block for this test - ch := make(chan React, 1) - engine.Subscribe("test", ch) - engine.Post("test", "hello") - - value := <-ch - if val, ok := value.Resource.(string); ok { - if val != "hello" { - t.Error("Expected Resource to be 'hello', got", val) - } - } else { - t.Error("Unable to cast") - } -} |