Ejemplo n.º 1
0
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")
}
Ejemplo n.º 2
0
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")
}
Ejemplo n.º 3
0
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")
}