update
This commit is contained in:
parent
6eb86a4028
commit
b1c58e2744
@ -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()
|
||||
|
@ -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 = "欢迎 "
|
||||
|
@ -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
|
||||
}
|
||||
|
12
cmd/v2/lib/common/utils_test.go
Normal file
12
cmd/v2/lib/common/utils_test.go
Normal 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
31
cmd/v2/model/push.go
Normal 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
|
||||
}
|
@ -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()
|
||||
|
@ -3,4 +3,5 @@ package observer
|
||||
const (
|
||||
EVENT_USERINFO Event = "userinfo"
|
||||
EVENT_APP_LOG Event = "app_log"
|
||||
EVENT_APP_PUSH Event = "push"
|
||||
)
|
||||
|
@ -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
24
cmd/v2/ui/about.go
Normal 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()
|
||||
}
|
@ -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
139
cmd/v2/ui/app_monitor.go
Normal 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")
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
@ -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,
|
||||
|
@ -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
|
||||
}
|
35
cmd/v2/ui/formview/bingoview.go
Normal file
35
cmd/v2/ui/formview/bingoview.go
Normal 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
|
||||
}
|
@ -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"
|
||||
|
@ -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)
|
||||
}
|
||||
|
||||
|
@ -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,
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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 {
|
||||
|
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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() {
|
||||
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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
|
||||
}
|
||||
|
@ -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()
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user