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