package app

import (
	"f5"
	"main/constant"
	"main/mt"
)

type app struct {
	initCb   func()
	unInitCb func()
}

func (this *app) GetPkgName() string {
	return "payserver"
}

func (this *app) GetHttpListenPort() int32 {
	return mt.Table.PayServerCluster.GetHttpListenPort()
}

func (this *app) Run(initCb func(), unInitCb func()) {
	this.initCb = initCb
	this.unInitCb = unInitCb
	f5.Run(this)
}

func (this *app) Init() {
	f5.LoadMetaTable(mt.Table)
	this.registerDataSources()
	this.initCb()	
}

func (this *app) UnInit() {
	this.unInitCb()
}

func (this *app) Update() {
}

func (this *app) registerDataSources() {
	f5.GetGoStyleDb().RegisterDataSource(
		constant.PAY_DB,
		mt.Table.PayDb.GetById(0).GetHost(),
		mt.Table.PayDb.GetById(0).GetPort(),
		mt.Table.PayDb.GetById(0).GetUser(),
		mt.Table.PayDb.GetById(0).GetPasswd(),
		mt.Table.PayDb.GetById(0).GetDatabase(),
		1,
		mt.Table.PayDb.GetById(0).GetMaxOpenConns(),
		mt.Table.PayDb.GetById(0).GetMaxIdleConns())

	f5.GetGoStyleDb().RegisterDataSource(
		constant.GAME_DB,
		mt.Table.GameDb.GetById(0).GetHost(),
		mt.Table.GameDb.GetById(0).GetPort(),
		mt.Table.GameDb.GetById(0).GetUser(),
		mt.Table.GameDb.GetById(0).GetPasswd(),
		mt.Table.GameDb.GetById(0).GetDatabase(),
		1,
		mt.Table.GameDb.GetById(0).GetMaxOpenConns(),
		mt.Table.GameDb.GetById(0).GetMaxIdleConns())

	f5.GetGoStyleDb().RegisterDataSource(
		constant.ACCOUNT_DB,
		mt.Table.AccountDb.GetById(0).GetHost(),
		mt.Table.AccountDb.GetById(0).GetPort(),
		mt.Table.AccountDb.GetById(0).GetUser(),
		mt.Table.AccountDb.GetById(0).GetPasswd(),
		mt.Table.AccountDb.GetById(0).GetDatabase(),
		1,
		mt.Table.AccountDb.GetById(0).GetMaxOpenConns(),
		mt.Table.AccountDb.GetById(0).GetMaxIdleConns())

	f5.GetGoStyleDb().RegisterDataSource(
		constant.CONF_DB,
		mt.Table.ConfDb.GetById(0).GetHost(),
		mt.Table.ConfDb.GetById(0).GetPort(),
		mt.Table.ConfDb.GetById(0).GetUser(),
		mt.Table.ConfDb.GetById(0).GetPasswd(),
		mt.Table.ConfDb.GetById(0).GetDatabase(),
		1,
		mt.Table.ConfDb.GetById(0).GetMaxOpenConns(),
		mt.Table.ConfDb.GetById(0).GetMaxIdleConns())
	f5.GetApp().RegisterOrmDb(
		constant.PAY_DB,
		mt.Table.PayDb.GetById(0).GetHost(),
		mt.Table.PayDb.GetById(0).GetPort(),
		mt.Table.PayDb.GetById(0).GetUser(),
		mt.Table.PayDb.GetById(0).GetPasswd(),
		mt.Table.PayDb.GetById(0).GetDatabase(),
	)
}

func (this *app) HasTask() bool {
	return false
}
