- introduce gui.Stop()
- remember state with open
- stopping ethereum stack is not gui concern, moved to main
- stopping mining, gui and ethereum handled via interrupt callbacks
- ^C triggers exactly the same behaviour as quit via menu
This commit is contained in:
zelig 2014-06-26 16:26:14 +01:00
parent c0a05fcf89
commit 21d86ca486
4 changed files with 47 additions and 13 deletions

View File

@ -3,17 +3,24 @@ package main
import (
"github.com/ethereum/go-ethereum/ethereal/ui"
"github.com/ethereum/go-ethereum/utils"
"github.com/ethereum/eth-go/ethlog"
"github.com/go-qml/qml"
"runtime"
"os"
)
func main() {
runtime.GOMAXPROCS(runtime.NumCPU())
utils.HandleInterrupt()
qml.Init(nil)
var interrupted = false
utils.RegisterInterrupt(func(os.Signal) {
interrupted = true
})
utils.HandleInterrupt()
// precedence: code-internal flag default < config file < environment variables < command line
Init() // parsing command line
utils.InitConfig(ConfigFile, Datadir, Identifier, "ETH")
@ -36,9 +43,19 @@ func main() {
}
gui := ethui.New(ethereum, LogLevel)
gui.Start(AssetPath)
utils.RegisterInterrupt(func(os.Signal) {
gui.Stop()
})
utils.StartEthereum(ethereum, UseSeed)
// gui blocks the main thread
gui.Start(AssetPath)
// we need to run the interrupt callbacks in case gui is closed
// this skips if we got here by actual interrupt stopping the GUI
if !interrupted {
utils.RunInterruptCallbacks(os.Interrupt)
}
// this blocks the thread
ethereum.WaitForShutdown()
ethlog.Flush()
}

View File

@ -37,6 +37,7 @@ type Gui struct {
pub *ethpub.PEthereum
logLevel ethlog.LogLevel
open bool
}
// Create GUI, but doesn't start it
@ -56,7 +57,7 @@ func New(ethereum *eth.Ethereum, logLevel int) *Gui {
pub := ethpub.NewPEthereum(ethereum)
return &Gui{eth: ethereum, lib: lib, txDb: db, addr: addr, pub: pub, logLevel: ethlog.LogLevel(logLevel)}
return &Gui{eth: ethereum, lib: lib, txDb: db, addr: addr, pub: pub, logLevel: ethlog.LogLevel(logLevel), open: false}
}
func (gui *Gui) Start(assetPath string) {
@ -104,7 +105,7 @@ func (gui *Gui) Start(assetPath string) {
}
logger.Infoln("Starting GUI")
gui.open = true
win.Show()
// only add the gui logger after window is shown otherwise slider wont be shown
if addlog {
@ -113,7 +114,16 @@ func (gui *Gui) Start(assetPath string) {
win.Wait()
// need to silence gui logger after window closed otherwise logsystem hangs
gui.SetLogLevel(ethlog.Silence)
gui.eth.Stop()
gui.open = false
}
func (gui *Gui) Stop() {
if gui.open {
gui.SetLogLevel(ethlog.Silence)
gui.open = false
gui.win.Hide()
}
logger.Infoln("Stopped")
}
func (gui *Gui) ToggleMining() {

View File

@ -46,4 +46,8 @@ func main() {
}
utils.StartEthereum(ethereum, UseSeed)
// this blocks the thread
ethereum.WaitForShutdown()
ethlog.Flush()
}

View File

@ -32,13 +32,17 @@ func HandleInterrupt() {
signal.Notify(c, os.Interrupt)
for sig := range c {
logger.Errorf("Shutting down (%v) ... \n", sig)
for _, cb := range interruptCallbacks {
cb(sig)
}
RunInterruptCallbacks(sig)
}
}()
}
func RunInterruptCallbacks(sig os.Signal) {
for _, cb := range interruptCallbacks {
cb(sig)
}
}
func AbsolutePath(Datadir string, filename string) string {
if path.IsAbs(filename) {
return filename
@ -94,6 +98,7 @@ func InitLogging (Datadir string, LogFile string, LogLevel int, DebugFile string
}
func InitConfig(ConfigFile string, Datadir string, Identifier string, EnvPrefix string) {
InitDataDir(Datadir)
ethutil.ReadConfig(ConfigFile, Datadir, Identifier, EnvPrefix)
ethutil.Config.Set("rpcport", "700")
}
@ -120,8 +125,6 @@ func StartEthereum(ethereum *eth.Ethereum, UseSeed bool) {
ethereum.Stop()
ethlog.Flush()
})
// this blocks the thread
ethereum.WaitForShutdown()
}
func ShowGenesis(ethereum *eth.Ethereum) {