diff --git a/cmd/bench/main_test.go b/cmd/bench/main_test.go index 2502f8d1b..183953c72 100644 --- a/cmd/bench/main_test.go +++ b/cmd/bench/main_test.go @@ -28,7 +28,7 @@ var res string func TestMain(m *testing.M) { if err := cache.OnInit(nil, cache.Set_Redis_Addr([]string{ // "10.0.0.9:6986", - "10.0.0.9:9001", "10.0.0.9:9002", + "10.0.0.9:9001","10.0.0.9:9002","10.0.0.9:9003","10.0.0.9:9004","10.0.0.9:9005","10.0.0.9:9006", }), cache.Set_Redis_Password(""), // cache.Set_Redis_Password("li13451234"), @@ -47,7 +47,7 @@ func TestMain(m *testing.M) { } func BenchmarkRedis(b *testing.B) { - uid := "0_62b18fce6d57b34781846f64" + uid := "2_62ec8ab8828fb7bf67b220b6" heroRedisKey := fmt.Sprintf("hero_%s%s", uid, "{herotest}") var ( // ncpu = runtime.NumCPU() diff --git a/cmd/v2/lib/common/lang.go b/cmd/v2/lib/common/lang.go index cf53a9c4a..f4aea922f 100644 --- a/cmd/v2/lib/common/lang.go +++ b/cmd/v2/lib/common/lang.go @@ -73,12 +73,27 @@ const ( // app APP_NAME = "机器人" + //about + APP_ABOUT_TITLE = "关于" + APP_ABOUT_CONFIRM = "好的" + APP_ABOUT_INFO = `GUI 梦工厂工具` + // app_testcase APP_TESTCASE_TITLE = "接口测试" APP_TESTCASE_LABEL_PATH = "路径" APP_TESTCASE_BTN_CLEARLOG = "清除" APP_TESTCASE_INTRO = "选择左侧的测试接口" + // toolbar + TOOLBAR_MONITOR = "监控" + TOOLBAR_TESTER = "接口测试" + + //monitor + APP_MONITOR_TITLE_ID = "编号" + APP_MONITOR_TITLE_DATE = "时间" + APP_MONITOR_TITLE_DATA = "数据" + APP_MONITOR_BTN_VIEW = "查看" + //form APP_TESTCASE_FORM_LABEL_HEROOBJID = "卡片OID" APP_TESTCASE_FORM_LABEL_RACECARD = "种族卡片" @@ -91,12 +106,10 @@ const ( APP_TESTCASE_FORM_NICKNAME = "昵称" APP_TESTCASE_OPTIONS = "选填" AAP_TESTCASE_FORM_TASK_DAY = "日常任务" - AAP_TESTCASE_FORM_TASK_WEEK = "周常任务" - AAP_TESTCASE_FORM_TASK_ACHIEVE = "成就" - - // toolbar - TOOLBAR_WELCOME = "欢迎" - TOOLBAR_TESTER = "tester" + APP_TESTCASE_FORM_TASK_WEEK = "周常任务" + APP_TESTCASE_FORM_TASK_ACHIEVE = "成就" + APP_TESTCASE_FORM_BINGO = "命令" + APP_TESTCASE_BTN_PUSH = "推送" //button BUTTON_LOGIN = "登录" @@ -106,7 +119,7 @@ const ( BUTTON_CANCEL = "取消" //label - LABEL_CHOOSE = "欢迎,您登录的服务是" + LABEL_CHOOSE = "欢迎,你即将登录的服务是[%s]%s" LABEL_NICKNAME = "昵称" LABEL_ACCOUNT = "账号" LABEL_WELCOME = "欢迎 " diff --git a/cmd/v2/lib/common/utils.go b/cmd/v2/lib/common/utils.go index 726ef44b4..914319d37 100644 --- a/cmd/v2/lib/common/utils.go +++ b/cmd/v2/lib/common/utils.go @@ -10,3 +10,34 @@ func FormatJson(data string) (string, error) { err := json.Indent(&out, []byte(data), "", " ") return out.String(), err } + +func SubStr(str string, start int, length int) (result string) { + s := []rune(str) + total := len(s) + if total == 0 { + return + } + // 允许从尾部开始计算 + if start < 0 { + start = total + start + if start < 0 { + return + } + } + if start > total { + return + } + // 到末尾 + if length < 0 { + length = total + } + + end := start + length + if end > total { + result = string(s[start:]) + } else { + result = string(s[start:end]) + } + + return +} diff --git a/cmd/v2/lib/common/utils_test.go b/cmd/v2/lib/common/utils_test.go new file mode 100644 index 000000000..a43bfde6b --- /dev/null +++ b/cmd/v2/lib/common/utils_test.go @@ -0,0 +1,12 @@ +package common + +import ( + "fmt" + "testing" +) + +func TestSubStr(t *testing.T) { + str := "type.googleapis.com/UserResChangePush" + r := SubStr(str, 20, len(str)) + fmt.Println(r) +} diff --git a/cmd/v2/model/push.go b/cmd/v2/model/push.go new file mode 100644 index 000000000..227f63f48 --- /dev/null +++ b/cmd/v2/model/push.go @@ -0,0 +1,31 @@ +package model + +import ( + "google.golang.org/protobuf/types/known/anypb" +) + +type PushModel struct { + MainType string + SubType string + MethodName string + DataTime string + Rsp *anypb.Any +} + +type PushModelList struct { + DataList []*PushModel +} + +func NewPushModelList() *PushModelList { + return &PushModelList{ + DataList: make([]*PushModel, 0), + } +} + +func (s *PushModelList) AsInterfaceArray() []interface{} { + rs := make([]interface{}, len(s.DataList), len(s.DataList)) + for i := range s.DataList { + rs[i] = s.DataList[i] + } + return rs +} diff --git a/cmd/v2/service/connService.go b/cmd/v2/service/connService.go index 97b9721d4..0615d0c83 100644 --- a/cmd/v2/service/connService.go +++ b/cmd/v2/service/connService.go @@ -1,10 +1,12 @@ package service import ( + "go_dreamfactory/cmd/v2/lib/common" "go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/service/observer" "go_dreamfactory/comm" "go_dreamfactory/pb" + "strings" "time" "github.com/golang/protobuf/ptypes" @@ -22,6 +24,7 @@ type ConnService interface { Connect(wsUrl string) error SendMsg(msg *pb.UserMessage, rsp proto.Message) (err error) ReceiveMsg() (code pb.ErrorCode, msg *pb.UserMessage) + ListenerPush() } type ConnServiceImpl struct { @@ -52,6 +55,46 @@ func (c *ConnServiceImpl) Connect(wsUrl string) error { return nil } +// listener push +func (c *ConnServiceImpl) ListenerPush() { + go func() { + for { + time.Sleep(time.Millisecond * 200) + msg := &pb.UserMessage{} + _, data, err := c.ws.ReadMessage() + if err != nil { + logrus.Errorf("readMessage err:%v", err) + return + } + + if err = proto.Unmarshal(data, msg); err != nil { + return + } + // logrus.WithFields( + // logrus.Fields{"MainType": msg.MainType, "SubType": msg.SubType}, + // ).Debug(msg.Data.TypeUrl) + + methodStr := msg.Data.TypeUrl + methodName := common.SubStr(methodStr, 20, len(methodStr)) + if strings.HasSuffix(methodName, "Push") { + p := &model.PushModel{ + MainType: msg.MainType, + SubType: msg.SubType, + MethodName: methodName, + DataTime: time.Now().Format(time.RFC3339), + Rsp: msg.Data, + } + + c.obs.Notify(observer.EVENT_APP_PUSH, p) + logrus.WithFields( + logrus.Fields{"MainType": msg.MainType, "SubType": msg.SubType}, + ).Debug(methodName) + } + } + }() + +} + // SendMsg .... func (c *ConnServiceImpl) SendMsg(msg *pb.UserMessage, rsp proto.Message) (err error) { // msg.Sec = r.BuildSecStr() diff --git a/cmd/v2/service/observer/event.go b/cmd/v2/service/observer/event.go index 35033bfdf..e24572967 100644 --- a/cmd/v2/service/observer/event.go +++ b/cmd/v2/service/observer/event.go @@ -3,4 +3,5 @@ package observer const ( EVENT_USERINFO Event = "userinfo" EVENT_APP_LOG Event = "app_log" + EVENT_APP_PUSH Event = "push" ) diff --git a/cmd/v2/service/pttService.go b/cmd/v2/service/pttService.go index 5e3dad01c..75974010b 100644 --- a/cmd/v2/service/pttService.go +++ b/cmd/v2/service/pttService.go @@ -19,7 +19,7 @@ type PttService interface { CreateRole(nickName string) (code pb.ErrorCode, rsp *pb.UserCreateResp) GetUser() *UserInfo SetUser(dbUser *pb.DBUser, dbUserExpand *pb.DBUserExpand) - SendToClient(msg *pb.UserMessage, rsp proto.Message) error + SendToClient(mainType, subType string, rsp proto.Message) error } type PttServiceImpl struct { @@ -51,7 +51,8 @@ func (p *PttServiceImpl) SetUser(dbUser *pb.DBUser, dbUserExpand *pb.DBUserExpan p.user = &UserInfo{DbUser: dbUser, DbUserExpand: dbUserExpand} } -func (p *PttServiceImpl) SendToClient(msg *pb.UserMessage, rsp proto.Message) (err error) { +func (p *PttServiceImpl) SendToClient(mainType, subType string, rsp proto.Message) (err error) { + msg := &pb.UserMessage{MainType: mainType, SubType: subType} msg.Sec = common.BuildSecStr(p.user.DbUser.Sid, p.user.DbUser.Binduid) if err = p.connService.SendMsg(msg, rsp); err != nil { logrus.WithField("err", err).Error(err) @@ -105,24 +106,24 @@ func (p *PttServiceImpl) CreateRole(nickName string) (code pb.ErrorCode, rsp *pb } //response - for { - if cd, msg := p.connService.ReceiveMsg(); cd != pb.ErrorCode_Success { - code = cd - break - } else { - rsp = &pb.UserCreateResp{} - if msg.MainType == string(comm.ModuleUser) && msg.SubType == user.UserSubTypeCreate { - if !comm.ProtoUnmarshal(msg, rsp) { - code = pb.ErrorCode_PbError - return - } - logrus. - WithFields(logrus.Fields{"nickname": nickName}). - WithFields(logrus.Fields{"rsp": rsp.IsSucc}). - Debug("response create role") - break - } - } - } + // for { + // if cd, msg := p.connService.ReceiveMsg(); cd != pb.ErrorCode_Success { + // code = cd + // break + // } else { + // rsp = &pb.UserCreateResp{} + // if msg.MainType == string(comm.ModuleUser) && msg.SubType == user.UserSubTypeCreate { + // if !comm.ProtoUnmarshal(msg, rsp) { + // code = pb.ErrorCode_PbError + // return + // } + // logrus. + // WithFields(logrus.Fields{"nickname": nickName}). + // WithFields(logrus.Fields{"rsp": rsp.IsSucc}). + // Debug("response create role") + // break + // } + // } + // } return } diff --git a/cmd/v2/ui/about.go b/cmd/v2/ui/about.go new file mode 100644 index 000000000..9175a2fb5 --- /dev/null +++ b/cmd/v2/ui/about.go @@ -0,0 +1,24 @@ +package ui + +import ( + "go_dreamfactory/cmd/v2/lib/common" + + "fyne.io/fyne/v2/dialog" + "fyne.io/fyne/v2/widget" +) + +type about struct { + aboutDialog dialog.Dialog +} + +func newAbout() *about { + var a about + content := widget.NewCard("", "", widget.NewRichTextFromMarkdown(common.APP_ABOUT_INFO)) + a.aboutDialog = dialog.NewCustom(common.APP_ABOUT_TITLE, common.APP_ABOUT_CONFIRM, content, globalWin.w) + + return &a +} + +func showAbout() { + newAbout().aboutDialog.Show() +} diff --git a/cmd/v2/ui/app_interface.go b/cmd/v2/ui/app_interface.go index fe194eec5..ed15e862d 100644 --- a/cmd/v2/ui/app_interface.go +++ b/cmd/v2/ui/app_interface.go @@ -16,10 +16,9 @@ type appInterface interface { var ( appRegister = []appInterface{ - &appWelcome{}, + &appMonitor{}, &appTester{}, - } - + } ) type appAdapter struct { diff --git a/cmd/v2/ui/app_monitor.go b/cmd/v2/ui/app_monitor.go new file mode 100644 index 000000000..cf86e7722 --- /dev/null +++ b/cmd/v2/ui/app_monitor.go @@ -0,0 +1,139 @@ +package ui + +import ( + "fmt" + "go_dreamfactory/cmd/v2/lib/common" + "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service/observer" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/container" + "fyne.io/fyne/v2/data/binding" + "fyne.io/fyne/v2/layout" + "fyne.io/fyne/v2/theme" + "fyne.io/fyne/v2/widget" + "github.com/sirupsen/logrus" + "google.golang.org/protobuf/types/known/anypb" +) + +type appMonitor struct { + appAdapter + + obs observer.Observer + logPanel *widget.Entry + monitorHeader *widget.List + monitorList *widget.List + monitorBinding binding.UntypedList + monitorData *model.PushModelList +} + +func (this *appMonitor) LazyInit(obs observer.Observer) error { + this.obs = obs + this.tabItem = container.NewTabItemWithIcon(common.TOOLBAR_MONITOR, theme.ComputerIcon(), nil) + + content := container.NewMax() + content.Objects = []fyne.CanvasObject{} + + // panel for output log + this.logPanel = widget.NewMultiLineEntry() + this.logPanel.Wrapping = fyne.TextWrapWord + clearBtn := widget.NewButtonWithIcon(common.APP_TESTCASE_BTN_CLEARLOG, theme.DeleteIcon(), func() { + this.logPanel.SetText("") + }) + resPanel := container.NewBorder(container.NewHBox(clearBtn, layout.NewSpacer()), nil, nil, nil, this.logPanel) + + this.monitorBinding = binding.NewUntypedList() + this.monitorData = model.NewPushModelList() + this.createMonitorList() + + // layout + panel := container.NewVSplit(container.NewBorder(this.monitorHeader, nil, nil, nil, this.monitorList), resPanel) + content.Objects = append(content.Objects, panel) + this.tabItem.Content = content + this.Run() + return nil +} + +func (a *appMonitor) OpenDefault() bool { + return true +} + +func (a *appMonitor) GetAppName() string { + return common.TOOLBAR_MONITOR +} + +func (a appMonitor) OnClose() bool { + return false +} + +// monitor list data +func (this *appMonitor) Run() { + this.obs.AddListener(observer.EVENT_APP_PUSH, observer.Listener{ + OnNotify: func(d interface{}, args ...interface{}) { + data := d.(*model.PushModel) + this.monitorData.DataList = append(this.monitorData.DataList, data) + this.reloadMonitorData() + }, + }) +} + +func (this *appMonitor) reloadMonitorData() { + if this.monitorData != nil { + d := this.monitorData.AsInterfaceArray() + this.monitorBinding.Set(d) + } +} + +func (this *appMonitor) createMonitorList() { + // header + this.monitorHeader = widget.NewList( + func() int { + return 1 + }, + func() fyne.CanvasObject { + return container.NewGridWithColumns(3, + widget.NewLabelWithStyle("", fyne.TextAlignLeading, fyne.TextStyle{}), + widget.NewLabelWithStyle("", fyne.TextAlignCenter, fyne.TextStyle{}), + widget.NewLabelWithStyle("", fyne.TextAlignCenter, fyne.TextStyle{})) + }, + func(id widget.ListItemID, item fyne.CanvasObject) { + item.(*fyne.Container).Objects[0].(*widget.Label).SetText(common.APP_MONITOR_TITLE_ID) + item.(*fyne.Container).Objects[1].(*widget.Label).SetText(common.APP_MONITOR_TITLE_DATA) + item.(*fyne.Container).Objects[2].(*widget.Label).SetText(common.APP_MONITOR_TITLE_DATE) + }, + ) + + // data + this.monitorList = widget.NewListWithData(this.monitorBinding, + func() fyne.CanvasObject { + return container.NewGridWithColumns(3, + widget.NewLabelWithStyle("", fyne.TextAlignLeading, fyne.TextStyle{}), + widget.NewLabelWithStyle("", fyne.TextAlignCenter, fyne.TextStyle{}), + widget.NewLabelWithStyle("", fyne.TextAlignCenter, fyne.TextStyle{}), + ) + }, + func(data binding.DataItem, item fyne.CanvasObject) { + o, _ := data.(binding.Untyped).Get() + pd := o.(*model.PushModel) + item.(*fyne.Container).Objects[0].(*widget.Label).SetText(fmt.Sprintf("%s.%s", pd.MainType, pd.SubType)) + item.(*fyne.Container).Objects[1].(*widget.Label).SetText(pd.MethodName) + item.(*fyne.Container).Objects[2].(*widget.Label).SetText(pd.DataTime) + }, + ) + + this.monitorList.OnSelected = func(id widget.ListItemID) { + if di, err := this.monitorBinding.GetItem(id); err != nil { + logrus.Error(err) + } else { + o, _ := di.(binding.Untyped).Get() + pd := o.(*model.PushModel) + if res, err := anypb.New(pd.Rsp); err == nil { + this.logPanel.Text = res.String() + this.logPanel.Refresh() + } else { + logrus.WithField("err", err).Error("view detail") + } + } + + } +} diff --git a/cmd/v2/ui/app_testcase.go b/cmd/v2/ui/app_testcase.go index c9bb98852..1181b0f76 100644 --- a/cmd/v2/ui/app_testcase.go +++ b/cmd/v2/ui/app_testcase.go @@ -5,11 +5,6 @@ import ( "go_dreamfactory/cmd/v2/lib/common" "go_dreamfactory/cmd/v2/model" "go_dreamfactory/cmd/v2/service/observer" - "go_dreamfactory/cmd/v2/ui/formview" - "go_dreamfactory/comm" - "go_dreamfactory/modules/hero" - "go_dreamfactory/modules/task" - "go_dreamfactory/modules/user" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" @@ -19,23 +14,6 @@ import ( "github.com/sirupsen/logrus" ) -// register views -var ( - viewRegister = map[string]MyCaseView{ - //user - ff(comm.ModuleUser, user.UserSubTypeModifyName): &formview.UserModifynameView{}, - //task - ff(comm.ModuleTask, task.TaskSubTypeList): &formview.TaskListView{}, - ff(comm.ModuleTask, task.TaskSubTypeReceive): &formview.TaskReceiveView{}, - ff(comm.ModuleTask, task.TaskSubTypeActiveList): &formview.TaskActiveListView{}, - ff(comm.ModuleTask, task.TaskSubTypeActiveReceive): &formview.TaskActiveReceiveView{}, - // hero - ff(comm.ModuleHero, hero.HeroSubTypeList): &formview.HeroListView{}, - ff(comm.ModuleHero, hero.StrengthenUplv): &formview.HeroStrengthenUplvView{}, - ff(comm.ModuleHero, hero.StrengthenUpStar): &formview.HeroStrengthenUpStarView{}, - } -) - type appTester struct { appAdapter } @@ -81,11 +59,11 @@ func (a *appTester) LazyInit(obs observer.Observer) error { // required! Refresh updates the widget formReq.Refresh() formCard := widget.NewCard("", "", formReq) - pos := widget.NewLabel("") + clearBtn := widget.NewButtonWithIcon(common.APP_TESTCASE_BTN_CLEARLOG, theme.DeleteIcon(), func() { resLog.SetText("") }) - resPanel := container.NewBorder(container.NewHBox(clearBtn, layout.NewSpacer(), pos), nil, nil, nil, resLog) + resPanel := container.NewBorder(container.NewHBox(clearBtn, layout.NewSpacer()), nil, nil, nil, resLog) panel := container.NewVSplit( formCard, diff --git a/cmd/v2/ui/app_welcome.go b/cmd/v2/ui/app_welcome.go deleted file mode 100644 index 8a762c1e7..000000000 --- a/cmd/v2/ui/app_welcome.go +++ /dev/null @@ -1,40 +0,0 @@ -package ui - -import ( - "go_dreamfactory/cmd/v2/lib/common" - "go_dreamfactory/cmd/v2/service/observer" - - "fyne.io/fyne/v2" - "fyne.io/fyne/v2/container" - "fyne.io/fyne/v2/theme" - "fyne.io/fyne/v2/widget" -) - -type appWelcome struct { - appAdapter -} - -func (a *appWelcome) LazyInit(obs observer.Observer) error { - - a.tabItem = container.NewTabItemWithIcon(common.TOOLBAR_WELCOME, theme.ComputerIcon(), nil) - - a.tabItem.Content = container.NewCenter( - container.NewVBox( - widget.NewLabelWithStyle(common.TOOLBAR_WELCOME, - fyne.TextAlignCenter, - fyne.TextStyle{Bold: true})), - ) - return nil -} - -func (a *appWelcome) OpenDefault() bool { - return true -} - -func (a *appWelcome) GetAppName() string { - return common.TOOLBAR_WELCOME -} - -func (a appWelcome) OnClose() bool { - return false -} diff --git a/cmd/v2/ui/formview/bingoview.go b/cmd/v2/ui/formview/bingoview.go new file mode 100644 index 000000000..18c8d0c13 --- /dev/null +++ b/cmd/v2/ui/formview/bingoview.go @@ -0,0 +1,35 @@ +package formview + +import ( + "go_dreamfactory/cmd/v2/lib/common" + "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/service" + "go_dreamfactory/pb" + + "fyne.io/fyne/v2" + "fyne.io/fyne/v2/widget" + "github.com/sirupsen/logrus" +) + +type BingoView struct { + BaseformView +} + +func (this *BingoView) CreateForm(t *model.TestCase) fyne.CanvasObject { + bingo := widget.NewEntry() + bingo.PlaceHolder = "eg. bingo:item,10001,1" + this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_BINGO, bingo)) + this.form.OnSubmit = func() { + if err := service.GetPttService().SendToClient( + t.MainType, + t.SubType, + &pb.GMCmdReq{Cmod: bingo.Text}, + ); err != nil { + logrus.Error(err) + return + } + + go service.GetConnService().RespHandle(t) + } + return this.form +} diff --git a/cmd/v2/ui/formview/common.go b/cmd/v2/ui/formview/common.go index 0d9f94b53..278d11058 100644 --- a/cmd/v2/ui/formview/common.go +++ b/cmd/v2/ui/formview/common.go @@ -10,14 +10,14 @@ func getTaskTagSelect() *widget.Select { var tagSelect *widget.Select tagSelect = widget.NewSelect([]string{ common.AAP_TESTCASE_FORM_TASK_DAY, - common.AAP_TESTCASE_FORM_TASK_WEEK, - common.AAP_TESTCASE_FORM_TASK_ACHIEVE}, func(s string) { + common.APP_TESTCASE_FORM_TASK_WEEK, + common.APP_TESTCASE_FORM_TASK_ACHIEVE}, func(s string) { switch s { case common.AAP_TESTCASE_FORM_TASK_DAY: tagSelect.Selected = "1" - case common.AAP_TESTCASE_FORM_TASK_WEEK: + case common.APP_TESTCASE_FORM_TASK_WEEK: tagSelect.Selected = "2" - case common.AAP_TESTCASE_FORM_TASK_ACHIEVE: + case common.APP_TESTCASE_FORM_TASK_ACHIEVE: tagSelect.Selected = "3" default: tagSelect.Selected = "0" diff --git a/cmd/v2/ui/formview/hero_list.go b/cmd/v2/ui/formview/hero_list.go index 19056f4d0..3707d9d74 100644 --- a/cmd/v2/ui/formview/hero_list.go +++ b/cmd/v2/ui/formview/hero_list.go @@ -15,8 +15,7 @@ type HeroListView struct { func (this *HeroListView) CreateForm(t *model.TestCase) fyne.CanvasObject { this.form.OnSubmit = func() { - head := &pb.UserMessage{MainType: t.MainType, SubType: t.SubType} - if err := service.GetPttService().SendToClient(head, &pb.HeroListReq{}); err != nil { + if err := service.GetPttService().SendToClient(t.MainType, t.SubType, &pb.HeroListReq{}); err != nil { logrus.Error(err) } diff --git a/cmd/v2/ui/formview/hero_strengthenUpStar.go b/cmd/v2/ui/formview/hero_strengthenUpStar.go index e5269e7d5..6fc40dfa2 100644 --- a/cmd/v2/ui/formview/hero_strengthenUpStar.go +++ b/cmd/v2/ui/formview/hero_strengthenUpStar.go @@ -81,8 +81,7 @@ func (this *HeroStrengthenUpStarView) CreateForm(t *model.TestCase) fyne.CanvasO }) } - head := &pb.UserMessage{MainType: t.MainType, SubType: t.SubType} - if err := service.GetPttService().SendToClient(head, + if err := service.GetPttService().SendToClient(t.MainType, t.SubType, &pb.HeroStrengthenUpStarReq{ HeroObjID: heroObjID.Text, HeroRace: heroRace, diff --git a/cmd/v2/ui/formview/hero_strengthenUplv.go b/cmd/v2/ui/formview/hero_strengthenUplv.go index 61f60f908..0b675c20a 100644 --- a/cmd/v2/ui/formview/hero_strengthenUplv.go +++ b/cmd/v2/ui/formview/hero_strengthenUplv.go @@ -35,7 +35,7 @@ func (this *HeroStrengthenUplvView) CreateForm(t *model.TestCase) fyne.CanvasObj this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_LABEL_HEROOBJID, heroObjID)) this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_LABEL_EXPCARDS, expCards)) - + this.form.OnSubmit = func() { var cards []*pb.MapStringInt32 @@ -53,8 +53,7 @@ func (this *HeroStrengthenUplvView) CreateForm(t *model.TestCase) fyne.CanvasObj }) } - head := &pb.UserMessage{MainType: t.MainType, SubType: t.SubType} - if err := service.GetPttService().SendToClient(head, + if err := service.GetPttService().SendToClient(t.MainType, t.SubType, &pb.HeroStrengthenUplvReq{ HeroObjID: heroObjID.Text, ExpCards: cards}); err != nil { diff --git a/cmd/v2/ui/formview/task_activelist.go b/cmd/v2/ui/formview/task_activelist.go index 4e37732f2..28a8ff542 100644 --- a/cmd/v2/ui/formview/task_activelist.go +++ b/cmd/v2/ui/formview/task_activelist.go @@ -19,10 +19,9 @@ type TaskActiveListView struct { func (this *TaskActiveListView) CreateForm(t *model.TestCase) fyne.CanvasObject { tagSelect := getTaskTagSelect() this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_TASKTAG, tagSelect)) - + this.form.OnSubmit = func() { - head := &pb.UserMessage{MainType: t.MainType, SubType: t.SubType} - if err := service.GetPttService().SendToClient(head, &pb.TaskActiveListReq{ + if err := service.GetPttService().SendToClient(t.MainType, t.SubType, &pb.TaskActiveListReq{ TaskTag: cast.ToInt32(tagSelect.Selected), }); err != nil { diff --git a/cmd/v2/ui/formview/task_activereceive.go b/cmd/v2/ui/formview/task_activereceive.go index 09a8ab926..352650e6f 100644 --- a/cmd/v2/ui/formview/task_activereceive.go +++ b/cmd/v2/ui/formview/task_activereceive.go @@ -24,8 +24,7 @@ func (this *TaskActiveReceiveView) CreateForm(t *model.TestCase) fyne.CanvasObje this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_TASKTAG, tagSelect)) this.form.OnSubmit = func() { - head := &pb.UserMessage{MainType: t.MainType, SubType: t.SubType} - if err := service.GetPttService().SendToClient(head, &pb.TaskActiveReceiveReq{ + if err := service.GetPttService().SendToClient(t.MainType, t.SubType, &pb.TaskActiveReceiveReq{ Id: id.Text, TaskTag: cast.ToInt32(tagSelect.Selected), }); err != nil { diff --git a/cmd/v2/ui/formview/task_list.go b/cmd/v2/ui/formview/task_list.go index c1c57f733..3bd236443 100644 --- a/cmd/v2/ui/formview/task_list.go +++ b/cmd/v2/ui/formview/task_list.go @@ -21,8 +21,7 @@ func (this *TaskListView) CreateForm(t *model.TestCase) fyne.CanvasObject { this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_TASKTAG, tagSelect)) this.form.OnSubmit = func() { - head := &pb.UserMessage{MainType: t.MainType, SubType: t.SubType} - if err := service.GetPttService().SendToClient(head, &pb.TaskListReq{ + if err := service.GetPttService().SendToClient(t.MainType, t.SubType, &pb.TaskListReq{ TaskTag: cast.ToInt32(tagSelect.Selected), }); err != nil { logrus.Error(err) diff --git a/cmd/v2/ui/formview/task_receive.go b/cmd/v2/ui/formview/task_receive.go index 42408e00f..750791968 100644 --- a/cmd/v2/ui/formview/task_receive.go +++ b/cmd/v2/ui/formview/task_receive.go @@ -27,8 +27,7 @@ func (this *TaskReceiveView) CreateForm(t *model.TestCase) fyne.CanvasObject { this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_TASKTAG, tagSelect)) this.form.OnSubmit = func() { - head := &pb.UserMessage{MainType: t.MainType, SubType: t.SubType} - if err := service.GetPttService().SendToClient(head, + if err := service.GetPttService().SendToClient(t.MainType, t.SubType, &pb.TaskReceiveReq{Id: id.Text, TaskTag: cast.ToInt32(tagSelect.Selected)}); err != nil { logrus.Error(err) return diff --git a/cmd/v2/ui/formview/user_modifyname.go b/cmd/v2/ui/formview/user_modifyname.go index 4a1d713e1..b93f35966 100644 --- a/cmd/v2/ui/formview/user_modifyname.go +++ b/cmd/v2/ui/formview/user_modifyname.go @@ -20,14 +20,17 @@ func (this *UserModifynameView) CreateForm(t *model.TestCase) fyne.CanvasObject this.form.AppendItem(widget.NewFormItem(common.APP_TESTCASE_FORM_NICKNAME, name)) this.form.OnSubmit = func() { - head := &pb.UserMessage{MainType: t.MainType, SubType: t.SubType} - if err := service.GetPttService().SendToClient(head, &pb.UserModifynameReq{Name: name.Text}); err != nil { + if err := service.GetPttService().SendToClient( + t.MainType, + t.SubType, + &pb.UserModifynameReq{Name: name.Text}, + ); err != nil { logrus.Error(err) return } go service.GetConnService().RespHandle(t) } - + return this.form } diff --git a/cmd/v2/ui/mainwindow.go b/cmd/v2/ui/mainwindow.go index 2b6a989e3..297cdc371 100644 --- a/cmd/v2/ui/mainwindow.go +++ b/cmd/v2/ui/mainwindow.go @@ -6,6 +6,7 @@ import ( "go_dreamfactory/cmd/v2/service" "go_dreamfactory/cmd/v2/service/observer" "go_dreamfactory/pb" + "strings" "fyne.io/fyne/v2" "fyne.io/fyne/v2/container" @@ -53,9 +54,6 @@ func NewMainWindow(ui *UIImpl) MainWindow { // tool bar mw.tb = newToolBar() - // Fun Toys - mw.toys = newToys(ui.obs) - // main app tabs mw.at = newAppContainer(ui.obs) @@ -119,13 +117,13 @@ func (ui *MainWindowImpl) CreateWindow(title string, width, height float32, _ bo // createChooseServerPopUp func (ui *MainWindowImpl) createChooseServerPopUp(w fyne.Window) error { - ch := make(chan int32) + ch := make(chan string) selServerWin := ui.createChooseServerWindow("选服", ch) go func() { - sid := <-ch + data := <-ch selServerWin.Hide() - ui.NewWelcomeLabel(sid) + ui.NewWelcomeLabel(data) ui.w.Show() }() return nil @@ -134,13 +132,13 @@ func (ui *MainWindowImpl) createChooseServerPopUp(w fyne.Window) error { // createChooseServerWindow func (ui *MainWindowImpl) createChooseServerWindow( title string, - ch chan int32) fyne.Window { + ch chan string) fyne.Window { makeButton := func(s *service.ServiceConf, parent fyne.Window) *widget.Button { btn := widget.NewButton(s.Name, func() { d := dialog.NewInformation("", common.INFO_WAIT, parent) d.SetDismissText(common.BUTTON_CANCEL) - d.Show() + d.Show() logrus.WithField("server", s.Name).Debug("choose server") //conn server @@ -148,10 +146,9 @@ func (ui *MainWindowImpl) createChooseServerWindow( d.Hide() dialog.ShowError(err, parent) } else { - ch <- s.SId + ch <- fmt.Sprintf("%d:%s", s.SId, s.Name) } }) - //other btn setting return btn } w := fyne.CurrentApp().NewWindow(title) @@ -195,10 +192,10 @@ func (ui *MainWindowImpl) createLoginWin(sid int32) { dialog.ShowError(err, ui.w) } else { + ui.connService.ListenerPush() //show mainwindow - logrus.Debug(rsp) + // logrus.Debug(rsp) ui.pttService.SetUser(rsp.Data, rsp.Ex) - ui.obs.Notify(observer.EVENT_USERINFO, ui.pttService.GetUser()) // isCreateRole if rsp.Data.Created { // ui.renderUserContainer() @@ -208,6 +205,7 @@ func (ui *MainWindowImpl) createLoginWin(sid int32) { if err != nil { logrus.WithField("appName", appName).Error(err) } + ui.obs.Notify(observer.EVENT_USERINFO, ui.pttService.GetUser()) } else { ui.createRoleWindowPopUp() } @@ -251,60 +249,42 @@ func (ui *MainWindowImpl) createRoleWindowPopUp() { } else { if nickname.Text != "" { logrus.WithField("nickname", nickname.Text).Debug("submit crete role") - if code, rsp := ui.pttService.CreateRole(nickname.Text); code != pb.ErrorCode_Success { + if code, _ := ui.pttService.CreateRole(nickname.Text); code != pb.ErrorCode_Success { err := fmt.Errorf("login err: %v[%d]", code, int32(code)) dialog.ShowError(err, ui.w) } else { - if rsp.IsSucc { - user := ui.pttService.GetUser() - logrus.WithField("uid", user.DbUser.Uid).Debug("create role succ") - ui.createWindowContainer() - } else { - logrus.Error("create role failure") + // if rsp.IsSucc { + user := ui.pttService.GetUser() + logrus.WithField("uid", user.DbUser.Uid).Debug("create role succ") + ui.createWindowContainer() + appName, err := ui.at.openDefaultApp() + if err != nil { + logrus.WithField("appName", appName).Error(err) } + ui.obs.Notify(observer.EVENT_USERINFO, ui.pttService.GetUser()) + // } } } } }, ui.w) } -// renderUserContainer fill userinfo in container -func (ui *MainWindowImpl) renderUserContainer() { - userInfo := ui.pttService.GetUser() - var ( - nickname string - ) - - if userInfo != nil && userInfo.DbUser != nil { - nickname = userInfo.DbUser.Name - } - c := container.NewCenter(container.NewHBox( - widget.NewLabelWithStyle(common.LABEL_NICKNAME+nickname, - fyne.TextAlignCenter, - fyne.TextStyle{Bold: true}), - )) - ui.w.SetContent(c) -} - // NewWelcomeLabel -func (ui *MainWindowImpl) NewWelcomeLabel(sid int32) { +func (ui *MainWindowImpl) NewWelcomeLabel(data string) { + p := strings.Split(data, ":") + if len(p) != 2 { + logrus.WithField("param", p).Error("choose service") + return + } c := container.NewCenter(container.NewVBox( - widget.NewLabelWithStyle(common.LABEL_CHOOSE+cast.ToString(sid), + widget.NewLabelWithStyle(fmt.Sprintf(common.LABEL_CHOOSE, p[0], p[1]), fyne.TextAlignCenter, fyne.TextStyle{Bold: true}), container.NewCenter(container.NewHBox( widget.NewButton(common.BUTTON_LOGIN, func() { - ui.createLoginWin(sid) + ui.createLoginWin(cast.ToInt32(p[0])) }), - // widget.NewButton(common.BUTTON_REGISTE, func() { - // logrus.Debug("registe") - // }), )), )) ui.w.SetContent(c) } - -// show userInfo -func (ui *MainWindowImpl) showUserInfoWin() { - -} diff --git a/cmd/v2/ui/protocol.go b/cmd/v2/ui/protocol.go index ce0f37422..d72d7efb3 100644 --- a/cmd/v2/ui/protocol.go +++ b/cmd/v2/ui/protocol.go @@ -3,10 +3,12 @@ package ui import ( "fmt" "go_dreamfactory/cmd/v2/model" + "go_dreamfactory/cmd/v2/ui/formview" "go_dreamfactory/comm" "go_dreamfactory/lego/core" "go_dreamfactory/modules/hero" "go_dreamfactory/modules/task" + "go_dreamfactory/modules/user" "go_dreamfactory/pb" "fyne.io/fyne/v2" @@ -18,9 +20,52 @@ type MyCaseView interface { CreateForm(t *model.TestCase) fyne.CanvasObject } -// nav +// 1 注册接口测试的表单试图 +var ( + viewRegister = map[string]MyCaseView{ + // gm + ff(comm.ModuleGM, "cmd"): &formview.BingoView{}, + //user + ff(comm.ModuleUser, user.UserSubTypeModifyName): &formview.UserModifynameView{}, + //task + ff(comm.ModuleTask, task.TaskSubTypeList): &formview.TaskListView{}, + ff(comm.ModuleTask, task.TaskSubTypeReceive): &formview.TaskReceiveView{}, + ff(comm.ModuleTask, task.TaskSubTypeActiveList): &formview.TaskActiveListView{}, + ff(comm.ModuleTask, task.TaskSubTypeActiveReceive): &formview.TaskActiveReceiveView{}, + // hero + ff(comm.ModuleHero, hero.HeroSubTypeList): &formview.HeroListView{}, + ff(comm.ModuleHero, hero.StrengthenUplv): &formview.HeroStrengthenUplvView{}, + ff(comm.ModuleHero, hero.StrengthenUpStar): &formview.HeroStrengthenUpStarView{}, + } +) + +// 2 添加导航菜单 +var ( + CaseIndex = map[string][]string{ + "": {"gm", "user", "hero", "task"}, + "gm": {"gm.cmd"}, + "user": {"user.modifyname"}, + "hero": {"hero.list", "hero.strengthenuplv", "hero.strengthenupstar"}, + "task": {"task.list", "task.receive", "task.activelist", "task.activereceive"}, + } +) + +// 3 注册测试用例 var ( CaseNav = map[string]*model.TestCase{ + // gm + "gm": { + MainType: string(comm.ModuleGM), + Enabled: true, + }, + ff(comm.ModuleGM, "cmd"): { + Desc: "eg. bingo:item,10001,1 bingo:attr,gold,1000000", + MainType: string(comm.ModuleGM), + SubType: "cmd", + Req: &pb.GMCmdReq{}, + Rsp: &pb.GMCmdResp{}, + Enabled: true, + }, // user "user": { MainType: "user", @@ -111,15 +156,6 @@ var ( } ) -var ( - CaseIndex = map[string][]string{ - "": {"user", "hero", "task"}, - "user": {"user.modifyname"}, - "hero": {"hero.list", "hero.strengthenuplv", "hero.strengthenupstar"}, - "task": {"task.list", "task.receive", "task.activelist", "task.activereceive"}, - } -) - func ff(s1 core.M_Modules, s2 string) string { return fmt.Sprintf("%s.%s", s1, s2) } diff --git a/cmd/v2/ui/tool_bar.go b/cmd/v2/ui/tool_bar.go index c45918d48..acb160b54 100644 --- a/cmd/v2/ui/tool_bar.go +++ b/cmd/v2/ui/tool_bar.go @@ -16,15 +16,18 @@ type toolBar struct { func newToolBar() *toolBar { var tb toolBar + // mainwindow toolbar tb.toolbar = widget.NewToolbar( widget.NewToolbarAction(theme.ComputerIcon(), func() { - openApp(common.TOOLBAR_WELCOME) + openApp(common.TOOLBAR_MONITOR) }), widget.NewToolbarAction(theme.AccountIcon(), func() { openApp(common.TOOLBAR_TESTER) }), - widget.NewToolbarSeparator(), - widget.NewToolbarAction(theme.DocumentIcon(), func() {}), + widget.NewToolbarSpacer(), + widget.NewToolbarAction(theme.HelpIcon(), func() { + showAbout() + }), ) return &tb } diff --git a/cmd/v2/ui/toy_userinfo.go b/cmd/v2/ui/toy_userinfo.go index 6e1b89115..6afe3a226 100644 --- a/cmd/v2/ui/toy_userinfo.go +++ b/cmd/v2/ui/toy_userinfo.go @@ -63,6 +63,7 @@ func (this *toyUserInfo) Run() { this.obs.AddListener(observer.EVENT_USERINFO, observer.Listener{ OnNotify: func(d interface{}, args ...interface{}) { time.Sleep(time.Millisecond * 50) + _ = this.data.Set([]string{}) if this.copyBtn.Disabled() { this.copyBtn.Enable() }