예제 #1
0
파일: app.go 프로젝트: henrylee2cn/go2o
func (this *MainApp) Storage() gof.Storage {
	if this._storage == nil {
		this._storage = storage.NewRedisStorage(this.Redis())
	}
	return this._storage
}
예제 #2
0
func main() {
	var (
		ch         chan bool = make(chan bool)
		confFile   string
		httpPort   int
		socketPort int
		restPort   int
		mode       string //启动模式: h开启http,s开启socket,a开启所有
		debug      bool
		trace      bool
		runDaemon  bool // 运行daemon
		help       bool
		newApp     *core.MainApp
	)

	flag.IntVar(&socketPort, "port2", 1001, "socket server port")
	flag.IntVar(&httpPort, "port", 1002, "web server port")
	flag.IntVar(&restPort, "port3", 1003, "rest api port")
	flag.StringVar(&mode, "mode", "shr", "boot mode.'h'- boot http service,'s'- boot socket service")
	flag.BoolVar(&debug, "debug", false, "enable debug")
	flag.BoolVar(&trace, "trace", false, "enable trace")
	flag.BoolVar(&help, "help", false, "command usage")
	flag.StringVar(&confFile, "conf", "app.conf", "")
	flag.BoolVar(&runDaemon, "d", false, "run daemon")
	flag.Parse()

	if help {
		flag.Usage()
		return
	}

	runtime.GOMAXPROCS(runtime.NumCPU())

	newApp = core.NewMainApp(confFile)
	if !newApp.Init(debug, trace) {
		os.Exit(1)
	}

	if v := newApp.Config().GetInt("server_port"); v != 0 {
		httpPort = v
	}
	if v := newApp.Config().GetInt("socket_port"); v != 0 {
		socketPort = v
	}
	if v := newApp.Config().GetInt("api_service_port"); v != 0 {
		restPort = v
	}

	gof.CurrentApp = newApp
	app.Init(newApp)
	cache.Initialize(storage.NewRedisStorage(newApp.Redis()))
	core.RegisterTypes()

	var booted bool

	if runDaemon {
		go daemon.Run(newApp)
	}

	if strings.Contains(mode, "s") {
		booted = true
		go app.RunSocket(newApp, socketPort, debug, trace)
	}

	if strings.Contains(mode, "h") {
		booted = true
		go app.RunWeb(newApp, httpPort, debug, trace)
	}

	if strings.Contains(mode, "r") {
		booted = true
		go app.RunRestApi(newApp, restPort)
	}

	if booted {
		<-ch
	}
}