You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
104 lines
2.4 KiB
104 lines
2.4 KiB
package pay |
|
|
|
import ( |
|
"context" |
|
"net/http" |
|
"server/call" |
|
"server/config" |
|
"server/db" |
|
edb "server/db/es" |
|
mdb "server/db/mysql" |
|
rdb "server/db/redis" |
|
"server/modules/pay/routers" |
|
"strconv" |
|
"time" |
|
|
|
"github.com/liangdas/mqant/conf" |
|
"github.com/liangdas/mqant/log" |
|
"github.com/liangdas/mqant/module" |
|
basemodule "github.com/liangdas/mqant/module/base" |
|
"github.com/liangdas/mqant/server" |
|
) |
|
|
|
type Pay struct { |
|
basemodule.BaseModule |
|
httpSvr *http.Server |
|
} |
|
|
|
var Module = func() module.Module { |
|
this := new(Pay) |
|
return this |
|
} |
|
|
|
func (p *Pay) GetType() string { |
|
return "pay" |
|
} |
|
|
|
func (p *Pay) Version() string { |
|
//可以在监控时了解代码版本 |
|
return "1.0.0" |
|
} |
|
|
|
func (p *Pay) OnInit(app module.App, settings *conf.ModuleSettings) { |
|
metadata := make(map[string]string) |
|
metadata["workID"] = strconv.Itoa(int(config.GetConfig().WorkID)) |
|
p.BaseModule.OnInit(p, app, settings, |
|
server.RegisterInterval(5*time.Second), |
|
server.RegisterTTL(10*time.Second), |
|
server.Metadata(metadata), |
|
) |
|
call.NewCaller(p) |
|
db.InitDB(&mdb.MysqlClient{}, &rdb.RedisClient{}, &edb.EsClient{}) |
|
log.Info("[%v]module init finish, config:%+v", p.GetType(), config.GetConfig().Pay) |
|
log.Info("[%v]module init finish, base:%+v", p.GetType(), config.GetBase()) |
|
call.InitReload(p.App.Transport()) |
|
initTimer() |
|
loadConfig() |
|
|
|
p.GetServer().RegisterGO("recharge", Recharge) |
|
p.GetServer().RegisterGO("withdraw", Withdraw) |
|
} |
|
|
|
func (p *Pay) Run(closeSig chan bool) { |
|
log.Info("[%v]module running", p.GetType()) |
|
call.InitTimeWheel(closeSig) |
|
p.startHttpServer() |
|
<-closeSig |
|
log.Info("[%v]module stop", p.GetType()) |
|
} |
|
|
|
func (p *Pay) startHttpServer() { |
|
cfg := config.GetConfig().Pay |
|
router := routers.SetUpRouter() |
|
srv := &http.Server{ |
|
Addr: cfg.Addr, |
|
Handler: router, |
|
} |
|
|
|
go func() { |
|
if config.GetConfig().Pay.TLS { |
|
if err := srv.ListenAndServeTLS(cfg.CertFile, cfg.KeyFile); err != nil { |
|
log.Error("ListenAndServeTLS fail error:%v", err) |
|
} |
|
} else { |
|
if err := srv.ListenAndServe(); err != nil { |
|
log.Error("ListenAndServe fail error:%v", err) |
|
} |
|
} |
|
}() |
|
// returning reference so caller can call Shutdown() |
|
p.httpSvr = srv |
|
} |
|
|
|
func (p *Pay) OnDestroy() { |
|
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) |
|
defer cancel() |
|
|
|
if err := p.httpSvr.Shutdown(ctx); err != nil { |
|
log.Error("OnDestroy Shutdown error:%v", err) |
|
} |
|
//一定别忘了继承 |
|
p.BaseModule.OnDestroy() |
|
|
|
log.Info("模块已销毁") |
|
}
|
|
|