aboutsummaryrefslogtreecommitdiffstats
path: root/mist/gui.go
diff options
context:
space:
mode:
Diffstat (limited to 'mist/gui.go')
-rw-r--r--mist/gui.go121
1 files changed, 59 insertions, 62 deletions
diff --git a/mist/gui.go b/mist/gui.go
index 80d4a1fc3..84ee1ea00 100644
--- a/mist/gui.go
+++ b/mist/gui.go
@@ -19,7 +19,6 @@ import (
"github.com/ethereum/eth-go/ethlog"
"github.com/ethereum/eth-go/ethminer"
"github.com/ethereum/eth-go/ethpipe"
- "github.com/ethereum/eth-go/ethreact"
"github.com/ethereum/eth-go/ethutil"
"github.com/ethereum/eth-go/ethwire"
"gopkg.in/qml.v1"
@@ -376,15 +375,6 @@ func (gui *Gui) update() {
gui.win.Root().Call("addPlugin", plugin.Path, "")
}
- var (
- blockChan = make(chan ethreact.Event, 100)
- txChan = make(chan ethreact.Event, 100)
- objectChan = make(chan ethreact.Event, 100)
- peerChan = make(chan ethreact.Event, 100)
- chainSyncChan = make(chan ethreact.Event, 100)
- miningChan = make(chan ethreact.Event, 100)
- )
-
peerUpdateTicker := time.NewTicker(5 * time.Second)
generalUpdateTicker := time.NewTicker(500 * time.Millisecond)
statsUpdateTicker := time.NewTicker(5 * time.Second)
@@ -397,61 +387,82 @@ func (gui *Gui) update() {
lastBlockLabel := gui.getObjectByName("lastBlockLabel")
miningLabel := gui.getObjectByName("miningLabel")
+ events := gui.eth.EventMux().Subscribe(
+ eth.ChainSyncEvent{},
+ eth.PeerListEvent{},
+ ethchain.NewBlockEvent{},
+ ethchain.TxEvent{},
+ ethminer.Event{},
+ )
+
+ // nameReg := gui.pipe.World().Config().Get("NameReg")
+ // mux.Subscribe("object:"+string(nameReg.Address()), objectChan)
+
go func() {
+ defer events.Unsubscribe()
for {
select {
- case b := <-blockChan:
- block := b.Resource.(*ethchain.Block)
- gui.processBlock(block, false)
- if bytes.Compare(block.Coinbase, gui.address()) == 0 {
- gui.setWalletValue(gui.eth.StateManager().CurrentState().GetAccount(gui.address()).Balance, nil)
+ case ev, isopen := <-events.Chan():
+ if !isopen {
+ return
}
- case txMsg := <-txChan:
- tx := txMsg.Resource.(*ethchain.Transaction)
+ switch ev := ev.(type) {
+ case ethchain.NewBlockEvent:
+ gui.processBlock(ev.Block, false)
+ if bytes.Compare(ev.Block.Coinbase, gui.address()) == 0 {
+ gui.setWalletValue(gui.eth.StateManager().CurrentState().GetAccount(gui.address()).Balance, nil)
+ }
- if txMsg.Name == "newTx:pre" {
- object := state.GetAccount(gui.address())
+ case ethchain.TxEvent:
+ tx := ev.Tx
+ if ev.Type == ethchain.TxPre {
+ object := state.GetAccount(gui.address())
- if bytes.Compare(tx.Sender(), gui.address()) == 0 {
- unconfirmedFunds.Sub(unconfirmedFunds, tx.Value)
- } else if bytes.Compare(tx.Recipient, gui.address()) == 0 {
- unconfirmedFunds.Add(unconfirmedFunds, tx.Value)
- }
+ if bytes.Compare(tx.Sender(), gui.address()) == 0 {
+ unconfirmedFunds.Sub(unconfirmedFunds, tx.Value)
+ } else if bytes.Compare(tx.Recipient, gui.address()) == 0 {
+ unconfirmedFunds.Add(unconfirmedFunds, tx.Value)
+ }
+
+ gui.setWalletValue(object.Balance, unconfirmedFunds)
+
+ gui.insertTransaction("pre", tx)
- gui.setWalletValue(object.Balance, unconfirmedFunds)
+ } else if ev.Type == ethchain.TxPost {
+ object := state.GetAccount(gui.address())
+ if bytes.Compare(tx.Sender(), gui.address()) == 0 {
+ object.SubAmount(tx.Value)
- gui.insertTransaction("pre", tx)
- } else {
- object := state.GetAccount(gui.address())
- if bytes.Compare(tx.Sender(), gui.address()) == 0 {
- object.SubAmount(tx.Value)
+ //gui.getObjectByName("transactionView").Call("addTx", ethpipe.NewJSTx(tx), "send")
+ gui.txDb.Put(tx.Hash(), tx.RlpEncode())
+ } else if bytes.Compare(tx.Recipient, gui.address()) == 0 {
+ object.AddAmount(tx.Value)
- //gui.getObjectByName("transactionView").Call("addTx", ethpipe.NewJSTx(tx), "send")
- gui.txDb.Put(tx.Hash(), tx.RlpEncode())
- } else if bytes.Compare(tx.Recipient, gui.address()) == 0 {
- object.AddAmount(tx.Value)
+ //gui.getObjectByName("transactionView").Call("addTx", ethpipe.NewJSTx(tx), "recv")
+ gui.txDb.Put(tx.Hash(), tx.RlpEncode())
+ }
- //gui.getObjectByName("transactionView").Call("addTx", ethpipe.NewJSTx(tx), "recv")
- gui.txDb.Put(tx.Hash(), tx.RlpEncode())
+ gui.setWalletValue(object.Balance, nil)
+
+ state.UpdateStateObject(object)
}
- gui.setWalletValue(object.Balance, nil)
+ // case object:
+ // gui.loadAddressBook()
+
+ case eth.PeerListEvent:
+ gui.setPeerInfo()
- state.UpdateStateObject(object)
+ case ethminer.Event:
+ if ev.Type == ethminer.Started {
+ gui.miner = ev.Miner
+ } else {
+ gui.miner = nil
+ }
}
- case <-objectChan:
- gui.loadAddressBook()
- case <-peerChan:
- gui.setPeerInfo()
case <-peerUpdateTicker.C:
gui.setPeerInfo()
- case msg := <-miningChan:
- if msg.Name == "miner:start" {
- gui.miner = msg.Resource.(*ethminer.Miner)
- } else {
- gui.miner = nil
- }
case <-generalUpdateTicker.C:
statusText := "#" + gui.eth.BlockChain().CurrentBlock.Number.String()
lastBlockLabel.Set("text", statusText)
@@ -478,20 +489,6 @@ func (gui *Gui) update() {
}
}
}()
-
- reactor := gui.eth.Reactor()
-
- reactor.Subscribe("newBlock", blockChan)
- reactor.Subscribe("newTx:pre", txChan)
- reactor.Subscribe("newTx:post", txChan)
- reactor.Subscribe("chainSync", chainSyncChan)
- reactor.Subscribe("miner:start", miningChan)
- reactor.Subscribe("miner:stop", miningChan)
-
- nameReg := gui.pipe.World().Config().Get("NameReg")
- reactor.Subscribe("object:"+string(nameReg.Address()), objectChan)
-
- reactor.Subscribe("peerList", peerChan)
}
func (gui *Gui) setStatsPane() {