This commit is contained in:
zhaocy 2022-08-05 19:41:52 +08:00
parent 6eb86a4028
commit b1c58e2744
27 changed files with 464 additions and 181 deletions

View File

@ -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()

View File

@ -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 = "欢迎 "

View File

@ -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
}

View File

@ -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)
}

31
cmd/v2/model/push.go Normal file
View File

@ -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
}

View File

@ -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()

View File

@ -3,4 +3,5 @@ package observer
const (
EVENT_USERINFO Event = "userinfo"
EVENT_APP_LOG Event = "app_log"
EVENT_APP_PUSH Event = "push"
)

View File

@ -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
}

24
cmd/v2/ui/about.go Normal file
View File

@ -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()
}

View File

@ -16,10 +16,9 @@ type appInterface interface {
var (
appRegister = []appInterface{
&appWelcome{},
&appMonitor{},
&appTester{},
}
)
type appAdapter struct {

139
cmd/v2/ui/app_monitor.go Normal file
View File

@ -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")
}
}
}
}

View File

@ -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,

View File

@ -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
}

View File

@ -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
}

View File

@ -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"

View File

@ -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)
}

View File

@ -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,

View File

@ -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 {

View File

@ -21,8 +21,7 @@ func (this *TaskActiveListView) 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.TaskActiveListReq{
if err := service.GetPttService().SendToClient(t.MainType, t.SubType, &pb.TaskActiveListReq{
TaskTag: cast.ToInt32(tagSelect.Selected),
}); err != nil {

View File

@ -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 {

View File

@ -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)

View File

@ -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

View File

@ -20,8 +20,11 @@ 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
}

View File

@ -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,7 +132,7 @@ 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() {
@ -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() {
}

View File

@ -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)
}

View File

@ -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
}

View File

@ -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()
}