ethreact
- use ethreact.Event, - increased buffered event channels, - subscribe after loop reading from channel starts
This commit is contained in:
		
							parent
							
								
									94b12f7804
								
							
						
					
					
						commit
						75a7a4c97c
					
				| @ -4,6 +4,7 @@ import ( | ||||
| 	"fmt" | ||||
| 	"github.com/ethereum/eth-go/ethchain" | ||||
| 	"github.com/ethereum/eth-go/ethpub" | ||||
| 	"github.com/ethereum/eth-go/ethreact" | ||||
| 	"github.com/ethereum/eth-go/ethutil" | ||||
| 	"github.com/go-qml/qml" | ||||
| ) | ||||
| @ -24,8 +25,8 @@ type AppContainer interface { | ||||
| type ExtApplication struct { | ||||
| 	*ethpub.PEthereum | ||||
| 
 | ||||
| 	blockChan       chan ethutil.React | ||||
| 	changeChan      chan ethutil.React | ||||
| 	blockChan       chan ethreact.Event | ||||
| 	changeChan      chan ethreact.Event | ||||
| 	quitChan        chan bool | ||||
| 	watcherQuitChan chan bool | ||||
| 
 | ||||
| @ -37,8 +38,8 @@ type ExtApplication struct { | ||||
| func NewExtApplication(container AppContainer, lib *UiLib) *ExtApplication { | ||||
| 	app := &ExtApplication{ | ||||
| 		ethpub.NewPEthereum(lib.eth), | ||||
| 		make(chan ethutil.React, 1), | ||||
| 		make(chan ethutil.React, 1), | ||||
| 		make(chan ethreact.Event, 10), | ||||
| 		make(chan ethreact.Event, 10), | ||||
| 		make(chan bool), | ||||
| 		make(chan bool), | ||||
| 		container, | ||||
|  | ||||
| @ -8,6 +8,7 @@ import ( | ||||
| 	"github.com/ethereum/eth-go/ethdb" | ||||
| 	"github.com/ethereum/eth-go/ethlog" | ||||
| 	"github.com/ethereum/eth-go/ethpub" | ||||
| 	"github.com/ethereum/eth-go/ethreact" | ||||
| 	"github.com/ethereum/eth-go/ethutil" | ||||
| 	"github.com/ethereum/eth-go/ethwire" | ||||
| 	"github.com/ethereum/go-ethereum/utils" | ||||
| @ -143,7 +144,7 @@ func (gui *Gui) showWallet(context *qml.Context) (*qml.Window, error) { | ||||
| 	gui.readPreviousTransactions() | ||||
| 	gui.setPeerInfo() | ||||
| 
 | ||||
| 	go gui.update() | ||||
| 	gui.update() | ||||
| 
 | ||||
| 	return win, nil | ||||
| } | ||||
| @ -266,21 +267,10 @@ func (gui *Gui) setWalletValue(amount, unconfirmedFunds *big.Int) { | ||||
| func (gui *Gui) update() { | ||||
| 	reactor := gui.eth.Reactor() | ||||
| 
 | ||||
| 	blockChan := make(chan ethutil.React, 1) | ||||
| 	txChan := make(chan ethutil.React, 1) | ||||
| 	objectChan := make(chan ethutil.React, 1) | ||||
| 	peerChan := make(chan ethutil.React, 1) | ||||
| 
 | ||||
| 	reactor.Subscribe("newBlock", blockChan) | ||||
| 	reactor.Subscribe("newTx:pre", txChan) | ||||
| 	reactor.Subscribe("newTx:post", txChan) | ||||
| 
 | ||||
| 	nameReg := ethpub.EthereumConfig(gui.eth.StateManager()).NameReg() | ||||
| 	if nameReg != nil { | ||||
| 		reactor.Subscribe("object:"+string(nameReg.Address()), objectChan) | ||||
| 	} | ||||
| 	reactor.Subscribe("peerList", peerChan) | ||||
| 
 | ||||
| 	blockChan := make(chan ethreact.Event, 1) | ||||
| 	txChan := make(chan ethreact.Event, 1) | ||||
| 	objectChan := make(chan ethreact.Event, 1) | ||||
| 	peerChan := make(chan ethreact.Event, 1) | ||||
| 	ticker := time.NewTicker(5 * time.Second) | ||||
| 
 | ||||
| 	state := gui.eth.StateManager().TransState() | ||||
| @ -288,6 +278,7 @@ func (gui *Gui) update() { | ||||
| 	unconfirmedFunds := new(big.Int) | ||||
| 	gui.win.Root().Call("setWalletValue", fmt.Sprintf("%v", ethutil.CurrencyToString(state.GetAccount(gui.address()).Amount))) | ||||
| 
 | ||||
| 	go func() { | ||||
| 		for { | ||||
| 			select { | ||||
| 			case b := <-blockChan: | ||||
| @ -300,7 +291,7 @@ func (gui *Gui) update() { | ||||
| 			case txMsg := <-txChan: | ||||
| 				tx := txMsg.Resource.(*ethchain.Transaction) | ||||
| 
 | ||||
| 			if txMsg.Event == "newTx:pre" { | ||||
| 				if txMsg.Name == "newTx:pre" { | ||||
| 					object := state.GetAccount(gui.address()) | ||||
| 
 | ||||
| 					if bytes.Compare(tx.Sender(), gui.address()) == 0 { | ||||
| @ -336,6 +327,16 @@ func (gui *Gui) update() { | ||||
| 				gui.setPeerInfo() | ||||
| 			} | ||||
| 		} | ||||
| 	}() | ||||
| 	reactor.Subscribe("newBlock", blockChan) | ||||
| 	reactor.Subscribe("newTx:pre", txChan) | ||||
| 	reactor.Subscribe("newTx:post", txChan) | ||||
| 
 | ||||
| 	nameReg := ethpub.EthereumConfig(gui.eth.StateManager()).NameReg() | ||||
| 	if nameReg != nil { | ||||
| 		reactor.Subscribe("object:"+string(nameReg.Address()), objectChan) | ||||
| 	} | ||||
| 	reactor.Subscribe("peerList", peerChan) | ||||
| } | ||||
| 
 | ||||
| func (gui *Gui) setPeerInfo() { | ||||
|  | ||||
| @ -6,6 +6,7 @@ import ( | ||||
| 	"github.com/ethereum/eth-go/ethchain" | ||||
| 	"github.com/ethereum/eth-go/ethlog" | ||||
| 	"github.com/ethereum/eth-go/ethpub" | ||||
| 	"github.com/ethereum/eth-go/ethreact" | ||||
| 	"github.com/ethereum/eth-go/ethutil" | ||||
| 	"github.com/ethereum/go-ethereum/utils" | ||||
| 	"github.com/obscuren/otto" | ||||
| @ -22,8 +23,8 @@ type JSRE struct { | ||||
| 	vm       *otto.Otto | ||||
| 	lib      *ethpub.PEthereum | ||||
| 
 | ||||
| 	blockChan  chan ethutil.React | ||||
| 	changeChan chan ethutil.React | ||||
| 	blockChan  chan ethreact.Event | ||||
| 	changeChan chan ethreact.Event | ||||
| 	quitChan   chan bool | ||||
| 
 | ||||
| 	objectCb map[string][]otto.Value | ||||
| @ -48,8 +49,8 @@ func NewJSRE(ethereum *eth.Ethereum) *JSRE { | ||||
| 		ethereum, | ||||
| 		otto.New(), | ||||
| 		ethpub.NewPEthereum(ethereum), | ||||
| 		make(chan ethutil.React, 1), | ||||
| 		make(chan ethutil.React, 1), | ||||
| 		make(chan ethreact.Event, 10), | ||||
| 		make(chan ethreact.Event, 10), | ||||
| 		make(chan bool), | ||||
| 		make(map[string][]otto.Value), | ||||
| 	} | ||||
| @ -64,6 +65,10 @@ func NewJSRE(ethereum *eth.Ethereum) *JSRE { | ||||
| 	// We have to make sure that, whoever calls this, calls "Stop"
 | ||||
| 	go re.mainLoop() | ||||
| 
 | ||||
| 	// Subscribe to events
 | ||||
| 	reactor := ethereum.Reactor() | ||||
| 	reactor.Subscribe("newBlock", self.blockChan) | ||||
| 
 | ||||
| 	re.Bind("eth", &JSEthereum{re.lib, re.vm}) | ||||
| 
 | ||||
| 	re.initStdFuncs() | ||||
| @ -108,10 +113,6 @@ func (self *JSRE) Stop() { | ||||
| } | ||||
| 
 | ||||
| func (self *JSRE) mainLoop() { | ||||
| 	// Subscribe to events
 | ||||
| 	reactor := self.ethereum.Reactor() | ||||
| 	reactor.Subscribe("newBlock", self.blockChan) | ||||
| 
 | ||||
| out: | ||||
| 	for { | ||||
| 		select { | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user