PoC reactor pattern

This commit is contained in:
obscuren 2014-03-03 00:55:10 +01:00
parent d65b4cd0dd
commit d2bc57cd34
2 changed files with 44 additions and 8 deletions

View File

@ -1,17 +1,44 @@
package ethutil
import (
"fmt"
"math/big"
"testing"
)
func TestCommon(t *testing.T) {
fmt.Println(CurrencyToString(BigPow(10, 19)))
fmt.Println(CurrencyToString(BigPow(10, 16)))
fmt.Println(CurrencyToString(BigPow(10, 13)))
fmt.Println(CurrencyToString(BigPow(10, 10)))
fmt.Println(CurrencyToString(BigPow(10, 7)))
fmt.Println(CurrencyToString(BigPow(10, 4)))
fmt.Println(CurrencyToString(big.NewInt(10)))
ether := CurrencyToString(BigPow(10, 19))
finney := CurrencyToString(BigPow(10, 16))
szabo := CurrencyToString(BigPow(10, 13))
vito := CurrencyToString(BigPow(10, 10))
turing := CurrencyToString(BigPow(10, 7))
eins := CurrencyToString(BigPow(10, 4))
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)
}
}

View File

@ -13,6 +13,9 @@ type ReactorEvent struct {
// 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
@ -22,11 +25,17 @@ func (e *ReactorEvent) Post(react React) {
// 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:]...)