增加cmd命令
This commit is contained in:
77
cmd/make.go
Normal file
77
cmd/make.go
Normal file
@@ -0,0 +1,77 @@
|
|||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"fmt"
|
||||||
|
"github.com/gogf/gf/v2/os/gcmd"
|
||||||
|
"github.com/gogf/gf/v2/os/gfile"
|
||||||
|
"github.com/gogf/gf/v2/text/gstr"
|
||||||
|
"github.com/gogf/gf/v2/util/gconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
var (
|
||||||
|
Make = gcmd.Command{
|
||||||
|
Name: "make",
|
||||||
|
Usage: "make",
|
||||||
|
Brief: "创建模块文件",
|
||||||
|
Arguments: []gcmd.Argument{
|
||||||
|
{Name: "model", Short: "m", Brief: "模块名"},
|
||||||
|
{Name: "id", Short: "i", Brief: "活动id"},
|
||||||
|
{Name: "name", Short: "n", Brief: "服务文件名"},
|
||||||
|
},
|
||||||
|
Examples: "make -m=act -id=1: 创建活动1的接口与服务文件 \n" +
|
||||||
|
"make -m=logic -n=test: 创建test的服务文件",
|
||||||
|
Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
|
||||||
|
|
||||||
|
//g.Dump(parser.GetOptAll(), parser.GetArgAll())
|
||||||
|
//return
|
||||||
|
var model = parser.GetOpt("model").String()
|
||||||
|
//var name = parser.GetOpt("n").String()
|
||||||
|
this := cMake{}
|
||||||
|
switch model {
|
||||||
|
case "act":
|
||||||
|
var id = parser.GetOpt("id").Int()
|
||||||
|
if id == 0 {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = this.Act(id)
|
||||||
|
case "logic":
|
||||||
|
var name = parser.GetOpt("name").String()
|
||||||
|
if name == "" {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = this.Logic(name)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
type cMake struct{}
|
||||||
|
|
||||||
|
func (c *cMake) Api() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *cMake) Act(id int) (err error) {
|
||||||
|
filePath := fmt.Sprintf("api/act/v1/act%v.go", id)
|
||||||
|
err = gfile.PutContents(filePath, "package v1\n")
|
||||||
|
|
||||||
|
filePath = fmt.Sprintf("internal/game/act/act%d/act%d.go", id, id)
|
||||||
|
fileStr := gfile.GetContents("internal/cmd/make/act")
|
||||||
|
fileStr = gstr.Replace(fileStr, "{id}", gconv.String(id))
|
||||||
|
err = gfile.PutContents(filePath, fileStr)
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *cMake) Logic(name string) (err error) {
|
||||||
|
var filePath = fmt.Sprintf("internal/logic/%s/%s.go", name, name)
|
||||||
|
fileStr := gfile.GetContents("internal/cmd/make/logic")
|
||||||
|
fileStr = gstr.Replace(fileStr, "{package}", name)
|
||||||
|
fileStr = gstr.Replace(fileStr, "{name}", gstr.CaseCamel(name))
|
||||||
|
|
||||||
|
err = gfile.PutContents(filePath, fileStr)
|
||||||
|
return
|
||||||
|
}
|
||||||
40
cmd/make/act
Normal file
40
cmd/make/act
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
package act{id}
|
||||||
|
|
||||||
|
import (
|
||||||
|
v1 "game_server/api/act/v1"
|
||||||
|
"game_server/internal/service"
|
||||||
|
"github.com/gogf/gf/v2/os/gctx"
|
||||||
|
)
|
||||||
|
|
||||||
|
type sAct{id} struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func New() *sAct{id} {
|
||||||
|
return &sAct{id}{}
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
ActId = {id}
|
||||||
|
ctx = gctx.New()
|
||||||
|
)
|
||||||
|
|
||||||
|
type Data struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *sAct{id}) GetData(uid int64) (data *Data) {
|
||||||
|
get, _ := service.GameAct().Info(uid, ActId)
|
||||||
|
get.Scan(&data)
|
||||||
|
if get.IsEmpty() || data == nil {
|
||||||
|
data = &Data{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *sAct{id}) SetData(uid int64, data interface{}) {
|
||||||
|
service.GameAct().Set(uid, ActId, data)
|
||||||
|
}
|
||||||
25
cmd/make/logic
Normal file
25
cmd/make/logic
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
package {package}
|
||||||
|
|
||||||
|
import (
|
||||||
|
"game_server/internal/service"
|
||||||
|
"github.com/gogf/gf/v2/os/gctx"
|
||||||
|
)
|
||||||
|
|
||||||
|
type s{name} struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
ctx = gctx.New()
|
||||||
|
)
|
||||||
|
|
||||||
|
func New() *s{name} {
|
||||||
|
return &s{name}{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
service.Register{name}(New())
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *s{name}) Info() {
|
||||||
|
|
||||||
|
}
|
||||||
95
cmd/update.go
Normal file
95
cmd/update.go
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
package cmd
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"github.com/ayflying/utility_go/s3"
|
||||||
|
"github.com/gogf/gf/v2/frame/g"
|
||||||
|
"github.com/gogf/gf/v2/net/ghttp"
|
||||||
|
"github.com/gogf/gf/v2/os/gcfg"
|
||||||
|
"github.com/gogf/gf/v2/os/gcmd"
|
||||||
|
"os"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type serverCfg struct {
|
||||||
|
Name string `json:"name" dc:"服务名"`
|
||||||
|
Address string `json:"address" dc:"服务地址"`
|
||||||
|
Prod bool `json:"prod" dc:"是否生产环境"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type UpdateReq struct {
|
||||||
|
File *ghttp.UploadFile `json:"file" binding:"required" dc:"文件"`
|
||||||
|
FileUrl string `json:"file_url" dc:"文件地址"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
Update = gcmd.Command{
|
||||||
|
Name: "update",
|
||||||
|
Usage: "update",
|
||||||
|
Brief: "更新系统",
|
||||||
|
Func: func(ctx context.Context, parser *gcmd.Parser) (err error) {
|
||||||
|
|
||||||
|
g.Log().Info(ctx, "准备上传更新文件")
|
||||||
|
//加载编辑配置文件
|
||||||
|
g.Cfg("hack").GetAdapter().(*gcfg.AdapterFile).SetFileName("hack/config.yaml")
|
||||||
|
getFileName, err := g.Cfg("hack").Get(ctx, "gfcli.build.name")
|
||||||
|
|
||||||
|
var list []*serverCfg
|
||||||
|
serverList := g.Cfg().MustGet(ctx, "server_list")
|
||||||
|
serverList.Scan(&list)
|
||||||
|
|
||||||
|
//如果有p或者prod参数,则删除prod字段为true的服务
|
||||||
|
if parser.GetOpt("a").IsNil() {
|
||||||
|
var temp []*serverCfg
|
||||||
|
for _, v := range list {
|
||||||
|
if v.Prod == false {
|
||||||
|
temp = append(temp, v)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
list = temp
|
||||||
|
} else {
|
||||||
|
g.Dump("升级", parser.GetOpt("a"))
|
||||||
|
}
|
||||||
|
|
||||||
|
g.Dump("需要更新的服务器", list)
|
||||||
|
|
||||||
|
filename := "linux_amd64/shining_u_server"
|
||||||
|
obj, err := os.Open(filename)
|
||||||
|
ff, err := obj.Stat()
|
||||||
|
var s3Mod *s3.Mod
|
||||||
|
//切换s3目标
|
||||||
|
updateServerS3Name, _ := g.Config().Get(ctx, "update_server_s3_name")
|
||||||
|
if updateServerS3Name != nil {
|
||||||
|
s3Mod = s3.New(updateServerS3Name.String())
|
||||||
|
} else {
|
||||||
|
s3Mod = s3.New("default")
|
||||||
|
}
|
||||||
|
bucketName := s3Mod.GetCfg().BucketName
|
||||||
|
|
||||||
|
_, err = s3Mod.PutObject(obj, getFileName.String(), bucketName, ff.Size())
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
//上传当前文件
|
||||||
|
url, err := s3Mod.GetFileUrl(getFileName.String(), bucketName)
|
||||||
|
g.Log().Debugf(ctx, "下载地址:%v", url)
|
||||||
|
|
||||||
|
//循环服务器,推送更新
|
||||||
|
for _, v := range list {
|
||||||
|
address := v.Address
|
||||||
|
g.Log().Debugf(ctx, "准备同步服务器:%v,url=%v", v.Name, address+"/callback/update")
|
||||||
|
get, err := g.Client().Discovery(nil).Timeout(time.Minute*1).Post(ctx, address+"/callback/update", &UpdateReq{
|
||||||
|
FileUrl: url.String(),
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
g.Log().Error(ctx, err)
|
||||||
|
}
|
||||||
|
defer get.Close()
|
||||||
|
g.Log().Debugf(ctx, "同步服务器:%v,完成=%v", v.Name, address)
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user