PoC reactor pattern
This commit is contained in:
parent
d65b4cd0dd
commit
d2bc57cd34
@ -1,17 +1,44 @@
|
|||||||
package ethutil
|
package ethutil
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"fmt"
|
|
||||||
"math/big"
|
"math/big"
|
||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestCommon(t *testing.T) {
|
func TestCommon(t *testing.T) {
|
||||||
fmt.Println(CurrencyToString(BigPow(10, 19)))
|
ether := CurrencyToString(BigPow(10, 19))
|
||||||
fmt.Println(CurrencyToString(BigPow(10, 16)))
|
finney := CurrencyToString(BigPow(10, 16))
|
||||||
fmt.Println(CurrencyToString(BigPow(10, 13)))
|
szabo := CurrencyToString(BigPow(10, 13))
|
||||||
fmt.Println(CurrencyToString(BigPow(10, 10)))
|
vito := CurrencyToString(BigPow(10, 10))
|
||||||
fmt.Println(CurrencyToString(BigPow(10, 7)))
|
turing := CurrencyToString(BigPow(10, 7))
|
||||||
fmt.Println(CurrencyToString(BigPow(10, 4)))
|
eins := CurrencyToString(BigPow(10, 4))
|
||||||
fmt.Println(CurrencyToString(big.NewInt(10)))
|
wei := CurrencyToString(big.NewInt(10))
|
||||||
|
|
||||||
|
if ether != "10 Ether" {
|
||||||
|
t.Error("Got", ether)
|
||||||
|
}
|
||||||
|
|
||||||
|
if finney != "10 Finney" {
|
||||||
|
t.Error("Got", finney)
|
||||||
|
}
|
||||||
|
|
||||||
|
if szabo != "10 Szabo" {
|
||||||
|
t.Error("Got", szabo)
|
||||||
|
}
|
||||||
|
|
||||||
|
if vito != "10 Vito" {
|
||||||
|
t.Error("Got", vito)
|
||||||
|
}
|
||||||
|
|
||||||
|
if turing != "10 Turing" {
|
||||||
|
t.Error("Got", turing)
|
||||||
|
}
|
||||||
|
|
||||||
|
if eins != "10 Eins" {
|
||||||
|
t.Error("Got", eins)
|
||||||
|
}
|
||||||
|
|
||||||
|
if wei != "10 Wei" {
|
||||||
|
t.Error("Got", wei)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,9 @@ type ReactorEvent struct {
|
|||||||
// Post the specified reactor resource on the channels
|
// Post the specified reactor resource on the channels
|
||||||
// currently subscribed
|
// currently subscribed
|
||||||
func (e *ReactorEvent) Post(react React) {
|
func (e *ReactorEvent) Post(react React) {
|
||||||
|
e.mut.Lock()
|
||||||
|
defer e.mut.Unlock()
|
||||||
|
|
||||||
for _, ch := range e.chans {
|
for _, ch := range e.chans {
|
||||||
go func(ch chan React) {
|
go func(ch chan React) {
|
||||||
ch <- react
|
ch <- react
|
||||||
@ -22,11 +25,17 @@ func (e *ReactorEvent) Post(react React) {
|
|||||||
|
|
||||||
// Add a subscriber to this event
|
// Add a subscriber to this event
|
||||||
func (e *ReactorEvent) Add(ch chan React) {
|
func (e *ReactorEvent) Add(ch chan React) {
|
||||||
|
e.mut.Lock()
|
||||||
|
defer e.mut.Unlock()
|
||||||
|
|
||||||
e.chans = append(e.chans, ch)
|
e.chans = append(e.chans, ch)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Remove a subscriber
|
// Remove a subscriber
|
||||||
func (e *ReactorEvent) Remove(ch chan React) {
|
func (e *ReactorEvent) Remove(ch chan React) {
|
||||||
|
e.mut.Lock()
|
||||||
|
defer e.mut.Unlock()
|
||||||
|
|
||||||
for i, c := range e.chans {
|
for i, c := range e.chans {
|
||||||
if c == ch {
|
if c == ch {
|
||||||
e.chans = append(e.chans[:i], e.chans[i+1:]...)
|
e.chans = append(e.chans[:i], e.chans[i+1:]...)
|
||||||
|
Loading…
Reference in New Issue
Block a user