go_dreamfactory/cmd/v2/ui/protocol.go
2022-09-08 15:49:17 +08:00

649 lines
20 KiB
Go

package ui
import (
"errors"
"fmt"
"go_dreamfactory/cmd/v2/model"
"go_dreamfactory/cmd/v2/service/observer"
formview "go_dreamfactory/cmd/v2/ui/views"
"go_dreamfactory/comm"
"go_dreamfactory/lego/core"
"go_dreamfactory/modules/friend"
"go_dreamfactory/modules/hero"
"go_dreamfactory/modules/linestory"
"go_dreamfactory/modules/mainline"
"go_dreamfactory/modules/rtask"
"go_dreamfactory/modules/sys"
"go_dreamfactory/modules/task"
"go_dreamfactory/modules/user"
"go_dreamfactory/pb"
"strings"
"fyne.io/fyne/v2"
"github.com/sirupsen/logrus"
"google.golang.org/protobuf/proto"
)
type MyCaseView interface {
Init(obs observer.Observer, w fyne.Window)
CreateView(t *model.TestCase) fyne.CanvasObject
Load()
}
// 1 注册接口测试的表单试图
var (
viewRegister = map[string]MyCaseView{
// gm
ff(comm.ModuleGM, "cmd"): &formview.BingoView{},
//sys
ff(comm.ModuleSys, "funclist"): &formview.SysFuncListView{},
//user
ff(comm.ModuleUser, user.UserSubTypeModifyName): &formview.UserModifynameView{},
ff(comm.ModuleUser, user.UserSubTypeModifySign): &formview.UserSignView{},
// items
ff(comm.ModuleItems, "getlist"): &formview.ItemListView{},
ff(comm.ModuleItems, "sellitem"): &formview.ItemsSellView{},
ff(comm.ModuleItems, "useitem"): &formview.ItemsUseView{},
//mail
ff(comm.ModuleMail, "getlist"): &formview.MailListView{},
ff(comm.ModuleMail, "readmail"): &formview.MailReadMailView{},
ff(comm.ModuleMail, "delmail"): &formview.MailDelView{},
ff(comm.ModuleMail, "getusermailattachment"): &formview.MailAttachmentView{},
ff(comm.ModuleMail, "getallmailattachment"): &formview.MailAttachmentAllView{},
//task
ff(comm.ModuleTask, task.TaskSubTypeList): &formview.TaskListView{},
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{},
//equip
ff(comm.ModuleEquipment, "getlist"): &formview.EquipListView{},
ff(comm.ModuleEquipment, "equip"): &formview.EquipUpDownView{},
ff(comm.ModuleEquipment, "upgrade"): &formview.EquipUpgradeView{},
//friend
ff(comm.ModuleFriend, friend.FriendSubTypeList): &formview.FriendListView{},
ff(comm.ModuleFriend, friend.FriendSubTypeApply): &formview.FriendApplyView{},
ff(comm.ModuleFriend, friend.FriendSubTypeAgree): &formview.FriendAgreeView{},
ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist): &formview.FriendBlacklistView{},
ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack): &formview.FriendAddBlackView{},
ff(comm.ModuleFriend, friend.FriendSubTypeDelBlack): &formview.FriendDelblackView{},
ff(comm.ModuleFriend, friend.FriendSubTypeSearch): &formview.FriendSearchView{},
ff(comm.ModuleFriend, friend.FriendSubTypeZanList): &formview.FriendZanView{},
ff(comm.ModuleFriend, friend.FriendSubTypeRandList): &formview.FriendRandListView{},
// shop
ff(comm.ModuleShop, "getlist"): &formview.ShopListView{},
ff(comm.ModuleShop, "buy"): &formview.ShopBuyView{},
// mailine
ff(comm.ModuleMainline, mainline.MainlineGetListResp): &formview.MainlineListView{},
ff(comm.ModuleMainline, mainline.MainlineChallengeResp): &formview.MainlineChallengeView{},
ff(comm.ModuleMainline, mainline.MainlineGetRewardResp): &formview.MainlineRewardView{},
// pagoda
ff(comm.ModulePagoda, "getlist"): &formview.PagodaListView{},
// rtask
ff(comm.ModuleRtask, rtask.RtaskSubTypeList): &formview.RtaskListView{},
ff(comm.ModuleRtask, rtask.RtaskSubTypeApply): &formview.RtaskDoitView{},
ff(comm.ModuleRtask, rtask.RtaskSubTypeChoose): &formview.RtaskChooseView{},
ff(comm.ModuleRtask, rtask.RtaskSubTypeReward): &formview.RtaskRewardView{},
ff(comm.ModuleRtask, "rtest"): &formview.RtaskTestView{},
// linestory
ff(comm.ModuleLinestory, linestory.LinestorySubTypeDostart): &formview.LinestoryStartView{},
ff(comm.ModuleLinestory, linestory.LinestorySubTypeDotask): &formview.LinestoryTaskView{},
}
)
// 2 添加导航菜单
var (
CaseIndex = map[string][]string{
"": {
string(comm.ModuleGM),
string(comm.ModuleSys),
string(comm.ModuleUser),
string(comm.ModuleHero),
string(comm.ModuleTask),
string(comm.ModuleFriend),
string(comm.ModuleMail),
string(comm.ModuleItems),
string(comm.ModuleEquipment),
string(comm.ModuleShop),
string(comm.ModuleMainline),
string(comm.ModulePagoda),
string(comm.ModuleRtask),
string(comm.ModuleLinestory),
},
"gm": {ff(comm.ModuleGM, "cmd")},
"sys": {
ff(comm.ModuleSys, "funclist"),
},
"user": {
ff(comm.ModuleUser, user.UserSubTypeModifyName),
ff(comm.ModuleUser, user.UserSubTypeModifySign),
},
"items": {
ff(comm.ModuleItems, "getlist"),
ff(comm.ModuleItems, "sellitem"),
ff(comm.ModuleItems, "useitem"),
},
"mail": {
ff(comm.ModuleMail, "getlist"),
ff(comm.ModuleMail, "readmail"),
ff(comm.ModuleMail, "delmail"),
ff(comm.ModuleMail, "getusermailattachment"),
ff(comm.ModuleMail, "getallmailattachment"),
},
"hero": {
ff(comm.ModuleHero, hero.HeroSubTypeList),
ff(comm.ModuleHero, hero.StrengthenUplv),
ff(comm.ModuleHero, hero.StrengthenUpStar),
},
"equipment": {
ff(comm.ModuleEquipment, "getlist"),
ff(comm.ModuleEquipment, "equip"),
ff(comm.ModuleEquipment, "upgrade"),
},
"task": {
ff(comm.ModuleTask, task.TaskSubTypeList),
ff(comm.ModuleTask, task.TaskSubTypeActiveList),
ff(comm.ModuleTask, task.TaskSubTypeActiveReceive),
},
"friend": {
ff(comm.ModuleFriend, friend.FriendSubTypeList),
ff(comm.ModuleFriend, friend.FriendSubTypeApply),
ff(comm.ModuleFriend, friend.FriendSubTypeAgree),
ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist),
ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack),
ff(comm.ModuleFriend, friend.FriendSubTypeDelBlack),
ff(comm.ModuleFriend, friend.FriendSubTypeSearch),
ff(comm.ModuleFriend, friend.FriendSubTypeZanList),
ff(comm.ModuleFriend, friend.FriendSubTypeRandList),
},
"shop": {
ff(comm.ModuleShop, "getlist"),
ff(comm.ModuleShop, "buy"),
},
"mainline": {
ff(comm.ModuleMainline, mainline.MainlineGetListResp),
ff(comm.ModuleMainline, mainline.MainlineChallengeResp),
ff(comm.ModuleMainline, mainline.MainlineGetRewardResp),
},
"pagoda": {
ff(comm.ModulePagoda, "getlist"),
},
"rtask": {
ff(comm.ModuleRtask, rtask.RtaskSubTypeList),
ff(comm.ModuleRtask, rtask.RtaskSubTypeApply),
ff(comm.ModuleRtask, rtask.RtaskSubTypeChoose),
ff(comm.ModuleRtask, rtask.RtaskSubTypeReward),
ff(comm.ModuleRtask, "rtest"),
},
"linestory": {
ff(comm.ModuleLinestory, linestory.LinestorySubTypeDostart),
ff(comm.ModuleLinestory, linestory.LinestorySubTypeDotask),
},
}
)
// 3 注册测试用例
var (
CaseNav = map[string]*model.TestCase{
// gm
"gm": {
NavLabel: "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,
},
"sys": {
NavLabel: "系统",
MainType: string(comm.ModuleSys),
Enabled: true,
},
ff(comm.ModuleSys, "funclist"): {
NavLabel: "功能列表",
Desc: "返回未开启的功能列表",
MainType: string(comm.ModuleSys),
SubType: sys.SysSubTypeFunc,
Enabled: true,
},
// user
"user": {
NavLabel: "用户",
MainType: "user",
Enabled: true,
},
"user.modifyname": {
Desc: "用户昵称修改",
NavLabel: "修改昵称",
MainType: "user",
SubType: "modifyname",
Req: &pb.UserModifynameReq{},
Rsp: &pb.UserModifynameResp{},
Print: func(rsp proto.Message) string {
logrus.WithFields(logrus.Fields{"main": "user", "stype": "modifyname"}).Debug("print")
var formatStr strings.Builder
if in, ok := rsp.(*pb.UserMessage); ok {
out := &pb.UserModifynameResp{}
if !comm.ProtoUnmarshal(in, out) {
return errors.New("unmarshal err").Error()
}
formatStr.WriteString(fmt.Sprintf("Uid:%s count:%d", out.Uid, out.Count))
}
return formatStr.String()
},
Enabled: true,
},
ff(comm.ModuleUser, user.UserSubTypeModifySign): {
NavLabel: "修改签名",
Desc: "用户签名修改",
MainType: string(comm.ModuleUser),
SubType: user.UserSubTypeModifySign,
Enabled: true,
},
//items
string(comm.ModuleItems): {
NavLabel: "道具",
MainType: string(comm.ModuleItems),
Enabled: true,
},
ff(comm.ModuleItems, "getlist"): {
NavLabel: "道具列表",
Desc: "道具列表",
MainType: string(comm.ModuleItems),
SubType: "getlist",
Enabled: true,
},
ff(comm.ModuleItems, "sellitem"): {
NavLabel: "道具售卖",
Desc: "道具售卖",
MainType: string(comm.ModuleItems),
SubType: "sellitem",
Enabled: true,
},
ff(comm.ModuleItems, "useitem"): {
NavLabel: "道具使用",
Desc: "道具使用",
MainType: string(comm.ModuleItems),
SubType: "useitem",
Enabled: true,
},
//mail
string(comm.ModuleMail): {
NavLabel: "邮箱",
MainType: string(comm.ModuleMail),
Enabled: true,
},
ff(comm.ModuleMail, "getlist"): {
NavLabel: "邮件列表",
Desc: "邮件列表",
MainType: string(comm.ModuleMail),
SubType: "getlist",
Enabled: true,
},
ff(comm.ModuleMail, "readmail"): {
NavLabel: "读邮件",
Desc: "读取邮件",
MainType: string(comm.ModuleMail),
SubType: "readmail",
Enabled: true,
},
ff(comm.ModuleMail, "delmail"): {
NavLabel: "删除邮件",
Desc: "删除邮件",
MainType: string(comm.ModuleMail),
SubType: "delmail",
Enabled: true,
},
ff(comm.ModuleMail, "getusermailattachment"): {
NavLabel: "领取附件",
Desc: "领取附件",
MainType: string(comm.ModuleMail),
SubType: "getusermailattachment",
Enabled: true,
},
ff(comm.ModuleMail, "getallmailattachment"): {
NavLabel: "一键领取",
Desc: "领取所有附件",
MainType: string(comm.ModuleMail),
SubType: "getallmailattachment",
Enabled: true,
},
// task
"task": {
NavLabel: "任务",
MainType: "task",
Enabled: true,
},
"task.list": {
NavLabel: "任务列表",
Desc: "用户任务列表",
MainType: "task",
SubType: "list",
Req: &pb.TaskListReq{},
Rsp: &pb.TaskListResp{},
Enabled: true,
Print: func(rsp proto.Message) string {
logrus.WithFields(logrus.Fields{"main": "task", "stype": "list"}).Debug("print")
var formatStr strings.Builder
if in, ok := rsp.(*pb.UserMessage); ok {
out := &pb.TaskListResp{}
if !comm.ProtoUnmarshal(in, out) {
return errors.New("unmarshal err").Error()
}
for i, v := range out.List {
formatStr.WriteString(fmt.Sprintf("%d- %v\n", (i + 1), v))
}
}
return formatStr.String()
},
},
ff(comm.ModuleTask, task.TaskSubTypeActiveList): {
NavLabel: "活跃度列表",
Desc: "用户活跃度列表",
MainType: string(comm.ModuleTask),
SubType: task.TaskSubTypeActiveList,
Req: &pb.TaskActiveListReq{},
Rsp: &pb.TaskActiveListResp{},
Enabled: true,
},
ff(comm.ModuleTask, task.TaskSubTypeActiveReceive): {
NavLabel: "活跃度领取",
Desc: "用户活跃度领取",
MainType: string(comm.ModuleTask),
SubType: task.TaskSubTypeActiveReceive,
Req: &pb.TaskActiveReceiveReq{},
Rsp: &pb.TaskActiveReceiveResp{},
Enabled: true,
},
// hero
string(comm.ModuleHero): {
NavLabel: "英雄",
MainType: string(comm.ModuleHero),
Enabled: true,
},
ff(comm.ModuleHero, hero.HeroSubTypeList): {
NavLabel: "英雄列表",
Desc: "英雄列表",
MainType: string(comm.ModuleHero),
SubType: hero.HeroSubTypeList,
Print: func(rsp proto.Message) string {
logrus.WithFields(logrus.Fields{"main": comm.ModuleHero, "stype": hero.HeroSubTypeList}).Debug("print")
var formatStr strings.Builder
if in, ok := rsp.(*pb.UserMessage); ok {
out := &pb.HeroListResp{}
if !comm.ProtoUnmarshal(in, out) {
return errors.New("unmarshal err").Error()
}
for i, v := range out.List {
formatStr.WriteString(fmt.Sprintf("%d- %v\n", (i + 1), v))
}
}
return formatStr.String()
},
Enabled: true,
},
ff(comm.ModuleHero, hero.StrengthenUplv): {
NavLabel: "英雄升级",
Desc: "英雄等级升级",
MainType: string(comm.ModuleHero),
SubType: hero.StrengthenUplv,
Req: &pb.HeroStrengthenUplvReq{},
Rsp: &pb.HeroStrengthenUplvResp{},
Enabled: true,
},
ff(comm.ModuleHero, hero.StrengthenUpStar): {
NavLabel: "英雄升星",
Desc: "英雄星级升级",
MainType: string(comm.ModuleHero),
SubType: hero.StrengthenUpStar,
Req: &pb.HeroStrengthenUpStarReq{},
Rsp: &pb.HeroStrengthenUpStarResp{},
Enabled: true,
},
//equipment
string(comm.ModuleEquipment): {
NavLabel: "装备",
MainType: string(comm.ModuleEquipment),
Enabled: true,
},
ff(comm.ModuleEquipment, "getlist"): {
NavLabel: "装备列表",
Desc: "装备列表",
MainType: string(comm.ModuleEquipment),
SubType: "getlist",
Enabled: true,
},
ff(comm.ModuleEquipment, "equip"): {
NavLabel: "穿卸装备",
Desc: "穿/卸装备",
MainType: string(comm.ModuleEquipment),
SubType: "equip",
Enabled: true,
},
ff(comm.ModuleEquipment, "upgrade"): {
NavLabel: "升级装备",
Desc: "升级装备",
MainType: string(comm.ModuleEquipment),
SubType: "upgrade",
Enabled: true,
},
//friend
string(comm.ModuleFriend): {
NavLabel: "好友",
MainType: string(comm.ModuleFriend),
Enabled: true,
},
ff(comm.ModuleFriend, friend.FriendSubTypeRandList): {
NavLabel: "在线玩家",
Desc: "在线玩家列表",
MainType: string(comm.ModuleFriend),
SubType: friend.FriendSubTypeRandList,
Enabled: true,
},
ff(comm.ModuleFriend, friend.FriendSubTypeList): {
NavLabel: "好友列表",
Desc: "好友列表",
MainType: string(comm.ModuleFriend),
SubType: friend.FriendSubTypeList,
Req: &pb.FriendListReq{},
Rsp: &pb.FriendListResp{},
Enabled: true,
},
ff(comm.ModuleFriend, friend.FriendSubTypeApply): {
NavLabel: "好友申请",
Desc: "好友申请",
MainType: string(comm.ModuleFriend),
SubType: friend.FriendSubTypeApply,
Req: &pb.FriendApplyReq{},
Rsp: &pb.FriendApplyResp{},
Enabled: true,
},
ff(comm.ModuleFriend, friend.FriendSubTypeBlacklist): {
NavLabel: "黑名单",
Desc: "黑名单列表",
MainType: string(comm.ModuleFriend),
SubType: friend.FriendSubTypeBlacklist,
Req: &pb.FriendBlackListReq{},
Rsp: &pb.FriendBlackListResp{},
Enabled: true,
},
ff(comm.ModuleFriend, friend.FriendSubTypeAddBlack): {
NavLabel: "加黑名单",
Desc: "添加黑名单",
MainType: string(comm.ModuleFriend),
SubType: friend.FriendSubTypeAddBlack,
Req: &pb.FriendAddBlackReq{},
Rsp: &pb.FriendAddBlackResp{},
Enabled: true,
},
ff(comm.ModuleFriend, friend.FriendSubTypeDelBlack): {
NavLabel: "删黑名单",
Desc: "删除黑名单",
MainType: string(comm.ModuleFriend),
SubType: friend.FriendSubTypeDelBlack,
Req: &pb.FriendDelBlackReq{},
Rsp: &pb.FriendDelBlackResp{},
Enabled: true,
},
ff(comm.ModuleFriend, friend.FriendSubTypeAgree): {
NavLabel: "好友审批",
Desc: "好友申请审批",
MainType: string(comm.ModuleFriend),
SubType: friend.FriendSubTypeAgree,
Req: &pb.FriendAgreeReq{},
Rsp: &pb.FriendAgreeResp{},
Enabled: true,
},
ff(comm.ModuleFriend, friend.FriendSubTypeSearch): {
NavLabel: "好友搜索",
Desc: "搜索好友",
MainType: string(comm.ModuleFriend),
SubType: friend.FriendSubTypeSearch,
Req: &pb.FriendSearchReq{},
Rsp: &pb.FriendSearchResp{},
Enabled: true,
},
ff(comm.ModuleFriend, friend.FriendSubTypeZanList): {
NavLabel: "好友点赞",
Desc: "点赞好友",
MainType: string(comm.ModuleFriend),
SubType: friend.FriendSubTypeZanList,
Enabled: true,
},
//shop
string(comm.ModuleShop): {
NavLabel: "商店",
MainType: string(comm.ModuleShop),
Enabled: true,
},
ff(comm.ModuleShop, "getlist"): {
NavLabel: "商店列表",
Desc: "商店列表",
MainType: string(comm.ModuleShop),
SubType: "getlist",
Enabled: true,
},
ff(comm.ModuleShop, "buy"): {
NavLabel: "购买商品",
Desc: "购买商品",
MainType: string(comm.ModuleShop),
SubType: "buy",
Enabled: true,
},
// mainline
string(comm.ModuleMainline): {
NavLabel: "主线关卡",
MainType: string(comm.ModuleShop),
Enabled: true,
},
ff(comm.ModuleMainline, mainline.MainlineGetListResp): {
NavLabel: "主线关卡",
Desc: "主线关卡",
MainType: string(comm.ModuleMainline),
SubType: mainline.MainlineGetListResp,
Enabled: true,
},
ff(comm.ModuleMainline, mainline.MainlineChallengeResp): {
NavLabel: "关卡挑战",
Desc: "关卡挑战",
MainType: string(comm.ModuleMainline),
SubType: mainline.MainlineChallengeResp,
Enabled: true,
},
ff(comm.ModuleMainline, mainline.MainlineGetRewardResp): {
NavLabel: "关卡奖励",
Desc: "获取关卡奖励",
MainType: string(comm.ModuleMainline),
SubType: mainline.MainlineGetRewardResp,
Enabled: true,
},
//pagoda
string(comm.ModulePagoda): {
NavLabel: "魔塔",
MainType: string(comm.ModulePagoda),
Enabled: true,
},
ff(comm.ModulePagoda, "getlist"): {
NavLabel: "魔塔列表",
Desc: "魔塔列表",
MainType: string(comm.ModulePagoda),
SubType: "getlist",
Enabled: true,
},
// rtask
string(comm.ModuleRtask): {
NavLabel: "随机任务",
MainType: string(comm.ModuleRtask),
Enabled: true,
},
ff(comm.ModuleRtask, rtask.RtaskSubTypeList): {
NavLabel: "任务列表",
MainType: string(comm.ModuleRtask),
SubType: rtask.RtaskSubTypeList,
Enabled: true,
},
ff(comm.ModuleRtask, rtask.RtaskSubTypeApply): {
NavLabel: "做任务",
Desc: "执行随机任务",
MainType: string(comm.ModuleRtask),
SubType: rtask.RtaskSubTypeApply,
Enabled: true,
},
ff(comm.ModuleRtask, rtask.RtaskSubTypeChoose): {
NavLabel: "情景对答",
Desc: "情景对答",
MainType: string(comm.ModuleRtask),
SubType: rtask.RtaskSubTypeChoose,
Enabled: true,
},
ff(comm.ModuleRtask, rtask.RtaskSubTypeReward): {
NavLabel: "领奖",
Desc: "领奖",
MainType: string(comm.ModuleRtask),
SubType: rtask.RtaskSubTypeReward,
Enabled: true,
},
ff(comm.ModuleRtask, "rtest"): {
NavLabel: "测试",
Desc: "测试任务触发",
MainType: string(comm.ModuleRtask),
SubType: "rtest",
Enabled: true,
},
//linestory
string(comm.ModuleLinestory): {
NavLabel: "支线剧情任务",
MainType: string(comm.ModuleLinestory),
Enabled: true,
},
ff(comm.ModuleLinestory, linestory.LinestorySubTypeDostart): {
NavLabel: "启动",
Desc: "启动剧情任务",
MainType: string(comm.ModuleLinestory),
SubType: linestory.LinestorySubTypeDostart,
Enabled: true,
},
ff(comm.ModuleLinestory, linestory.LinestorySubTypeDotask): {
NavLabel: "做任务",
Desc: "做任务",
MainType: string(comm.ModuleLinestory),
SubType: linestory.LinestorySubTypeDotask,
Enabled: true,
},
}
)
func ff(s1 core.M_Modules, s2 string) string {
return fmt.Sprintf("%s.%s", s1, s2)
}