func main() { var cfg client.Config home := util.UserHome() var servPubkey string flag.StringVar(&cfg.ServAddr, "s", "localhost:8080", "server address") flag.IntVar(&cfg.Port, "p", 6060, "rpc port") flag.StringVar(&cfg.GuiDir, "gui-dir", "./src/web-app/static", "webapp static dir") flag.StringVar(&cfg.WalletDir, "wlt-dir", filepath.Join(home, ".exchange-client/wallet"), "wallet dir") flag.StringVar(&cfg.AccountDir, "account-dir", filepath.Join(home, ".exchange-client/account"), "account dir") flag.StringVar(&servPubkey, "server-pubkey", "02942e46684114b35fe15218dfdc6e0d74af0446a397b8fcbf8b46fb389f756eb8", "server pubkey") flag.Parse() cfg.GuiDir = util.ResolveResourceDirectory(cfg.GuiDir) // init sknet server pubkey sknet.SetPubkey(servPubkey) // init logger. initLogging(logging.DEBUG, true) quit := make(chan int) go catchInterrupt(quit) // Watch for SIGUSR1 go catchDebug() c := client.New(cfg) c.BindCoins(&bitcoin.Bitcoin{}, skycoin.New(cfg.ServAddr), mzcoin.New(cfg.ServAddr)) c.Run() <-quit logger.Info("Goodbye") }
func Run(c *Config) { c.WebInterface.GUIDirectory = util.ResolveResourceDirectory( c.WebInterface.GUIDirectory) // print this message regardless of the log level fmt.Printf("Full address: %s\n", c.fullAddress()) // start node_manager fmt.Printf("Starting Node Manager Service...\n") // TODO: empty config? what the hell? // *nodemanager.NodeManager nm := nodemanager.NewNodeManager(&nodemanager.NodeManagerConfig{}) if c.WebInterface.Enable == true { var err error if c.WebInterface.HTTPS == true { // TODO log.Panic("HTTPS support is not implemented yet") // // errs := util.CreateCertIfNotExists(host, c.WebInterfaceCert, // c.WebInterfaceKey, "Skywired") // if len(errs) != 0 { // for _, err := range errs { // logger.Error(err.Error()) // } // logger.Error("gui.CreateCertIfNotExists failure") // os.Exit(1) // } // // err = gui.LaunchWebInterfaceHTTPS(host, c.GUIDirectory, d, // c.WebInterfaceCert, c.WebInterfaceKey) // } else { err = gui.LaunchWebInterface(c.host(), c.WebInterface.GUIDirectory, nm) } if err != nil { logger.Error(err.Error()) logger.Error("Failed to start web GUI") os.Exit(1) } c.launchBrowser() } // subscribe to SIGINT (Ctrl+C) sigint := catchInterrupt() // start the node manager // don't use 'chan int' to stop the node manager; // there is Shutdown() method go nm.Start() // waiting for SIGINT (Ctrl+C) logger.Info("Got signal %q, shutting down...", <-sigint) // shutdown the node manager nm.Shutdown() logger.Info("Goodbye") }
func Run(c *Config) { c.GUIDirectory = util.ResolveResourceDirectory(c.GUIDirectory) scheme := "http" if c.WebInterfaceHTTPS { scheme = "https" } host := fmt.Sprintf("%s:%d", c.WebInterfaceAddr, c.WebInterfacePort) fullAddress := fmt.Sprintf("%s://%s", scheme, host) logger.Critical("Full address: %s", fullAddress) if c.PrintWebInterfaceAddress { fmt.Println(fullAddress) return } initProfiling(c.HTTPProf, c.ProfileCPU, c.ProfileCPUFile) logCfg := util.DevLogConfig(logModules) logCfg.Format = logFormat logCfg.InitLogger() // initLogging(c.LogLevel, c.ColorLog) // start the block db. blockdb.Start() defer blockdb.Stop() // start the transaction db. // transactiondb.Start() // defer transactiondb.Stop() // If the user Ctrl-C's, shutdown properly quit := make(chan int) go catchInterrupt(quit) // Watch for SIGUSR1 go catchDebug() gui.InitWalletRPC(c.WalletDirectory) dconf := configureDaemon(c) d := daemon.NewDaemon(dconf) stopDaemon := make(chan int) go d.Start(stopDaemon) // start the webrpc closingC := make(chan struct{}) if c.RPCInterface { go webrpc.Start( fmt.Sprintf("%v:%v", c.RPCInterfaceAddr, c.RPCInterfacePort), webrpc.ChanBuffSize(1000), webrpc.ThreadNum(1000), webrpc.Gateway(d.Gateway), webrpc.Quit(closingC)) } // Debug only - forces connection on start. Violates thread safety. if c.ConnectTo != "" { _, err := d.Pool.Pool.Connect(c.ConnectTo) if err != nil { log.Panic(err) } } if c.WebInterface { var err error if c.WebInterfaceHTTPS { // Verify cert/key parameters, and if neither exist, create them errs := util.CreateCertIfNotExists(host, c.WebInterfaceCert, c.WebInterfaceKey, "Skycoind") if len(errs) != 0 { for _, err := range errs { logger.Error(err.Error()) } logger.Error("gui.CreateCertIfNotExists failure") os.Exit(1) } err = gui.LaunchWebInterfaceHTTPS(host, c.GUIDirectory, d, c.WebInterfaceCert, c.WebInterfaceKey) } else { err = gui.LaunchWebInterface(host, c.GUIDirectory, d) } if err != nil { logger.Error(err.Error()) logger.Error("Failed to start web GUI") os.Exit(1) } if c.LaunchBrowser { go func() { // Wait a moment just to make sure the http interface is up time.Sleep(time.Millisecond * 100) logger.Info("Launching System Browser with %s", fullAddress) if err := util.OpenBrowser(fullAddress); err != nil { logger.Error(err.Error()) } }() } } /* time.Sleep(5) tx := InitTransaction() _ = tx err, _ = d.Visor.Visor.InjectTxn(tx) if err != nil { log.Panic(err) } */ /* //first transaction if c.RunMaster == true { go func() { for d.Visor.Visor.Blockchain.Head().Seq() < 2 { time.Sleep(5) tx := InitTransaction() err, _ := d.Visor.Visor.InjectTxn(tx) if err != nil { //log.Panic(err) } } }() } */ <-quit stopDaemon <- 1 close(closingC) logger.Info("Shutting down") d.Shutdown() logger.Info("Goodbye") }