update robot

This commit is contained in:
zhaocy 2022-06-27 20:27:49 +08:00
parent 01cd864ba1
commit 8d0a0a0043
11 changed files with 284 additions and 387 deletions

View File

@ -4,209 +4,77 @@ import (
"go_dreamfactory/comm"
"go_dreamfactory/modules/friend"
"go_dreamfactory/pb"
"log"
)
func (r *Robot) handleFriendMsg(msg *pb.UserMessage) {
switch msg.SubType {
case friend.Friend_SubType_List:
r.handleFriendList(msg)
case friend.Friend_SubType_Apply:
r.handleFriendApply(msg)
case friend.Friend_SubType_ApplyList:
r.handleFriendApplyList(msg)
case friend.Friend_SubType_Agree:
r.handleFriendAgree(msg)
case friend.Friend_SubType_Refuse:
r.handleFriendRefuse(msg)
case friend.Friend_SubType_Blacklist:
r.handleFriendBlacklist(msg)
case friend.Friend_SubType_AddBlack:
r.handleFriendAddBlack(msg)
case friend.Friend_SubType_DelBlack:
r.handleFriendDelBlack(msg)
case friend.Friend_SubType_Search:
r.handleFriendSearch(msg)
var (
//friend
friend_builders = []*builder{
{
//list
mainType: string(comm.SM_FriendModule),
subType: friend.Friend_SubType_List,
req: &pb.Friend_List_Req{},
rsp: &pb.Friend_List_Rsp{},
enabled: true,
}, {
//blacklist
mainType: string(comm.SM_FriendModule),
subType: friend.Friend_SubType_Blacklist,
req: &pb.Friend_BlackList_Req{},
rsp: &pb.Friend_BlackList_Rsp{},
}, {
//search
mainType: string(comm.SM_FriendModule),
subType: friend.Friend_SubType_Search,
req: &pb.Friend_Search_Req{
NickName: "", //设置测试参数
},
rsp: &pb.Friend_Search_Rsp{},
}, {
//apply
mainType: string(comm.SM_FriendModule),
subType: friend.Friend_SubType_Apply,
req: &pb.Friend_Apply_Req{},
rsp: &pb.Friend_Apply_Rsp{},
enabled: true,
}, {
//applylist
mainType: string(comm.SM_FriendModule),
subType: friend.Friend_SubType_ApplyList,
req: &pb.Friend_ApplyList_Req{},
rsp: &pb.Friend_ApplyList_Rsp{},
}, {
//agree
mainType: string(comm.SM_FriendModule),
subType: friend.Friend_SubType_Agree,
req: &pb.Friend_Agree_Req{},
rsp: &pb.Friend_Agree_Rsp{},
}, {
//refuse
mainType: string(comm.SM_FriendModule),
subType: friend.Friend_SubType_Refuse,
req: &pb.Friend_Agree_Req{},
rsp: &pb.Friend_Agree_Rsp{},
}, {
//addblack
mainType: string(comm.SM_FriendModule),
subType: friend.Friend_SubType_AddBlack,
req: &pb.Friend_BlackAdd_Req{
FriendId: "",
},
rsp: &pb.Friend_BlackAdd_Rsp{},
}, {
//delblack
mainType: string(comm.SM_FriendModule),
subType: friend.Friend_SubType_DelBlack,
req: &pb.Friend_DelBlack_Req{},
rsp: &pb.Friend_DelBlack_Rsp{},
},
}
}
)
//好友列表
func (r *Robot) FriendList() {
req := &pb.Friend_List_Req{}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_List}
defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendList(msg *pb.UserMessage) {
rsp := &pb.Friend_List_Rsp{}
if !comm.ProtoUnmarshal(msg, rsp) {
return
}
printReply(msg, rsp)
}
//好友搜索
func (r *Robot) FriendSearch(nickName string) {
req := &pb.Friend_Search_Req{
NickName: nickName,
}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Search}
defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendSearch(msg *pb.UserMessage) {
rsp := &pb.Friend_Search_Rsp{}
if !comm.ProtoUnmarshal(msg, rsp) {
return
}
printReply(msg, rsp)
}
//好友申请
func (r *Robot) FriendApply(friendId string) {
req := &pb.Friend_Apply_Req{
FriendId: friendId,
}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Apply}
defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendApply(msg *pb.UserMessage) {
rsp := &pb.Friend_Apply_Rsp{}
if !comm.ProtoUnmarshal(msg, rsp) {
return
}
printReply(msg, rsp)
}
// 申请列表
func (r *Robot) FriendApplyList() {
req := &pb.Friend_ApplyList_Req{}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_ApplyList}
defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendApplyList(msg *pb.UserMessage) {
rsp := &pb.Friend_ApplyList_Rsp{}
if !comm.ProtoUnmarshal(msg, rsp) {
return
}
printReply(msg, rsp)
}
//同意
func (r *Robot) FriendAgree(friendIds []string) {
req := &pb.Friend_Agree_Req{
FriendIds: friendIds,
}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Agree}
defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendAgree(msg *pb.UserMessage) {
rsp := &pb.Friend_Agree_Rsp{}
if !comm.ProtoUnmarshal(msg, rsp) {
return
}
printReply(msg, rsp)
}
//拒绝
func (r *Robot) FriendRefuse(friendIds []string) {
req := &pb.Friend_Refuse_Req{
FriendIds: friendIds,
}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Refuse}
defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendRefuse(msg *pb.UserMessage) {
rsp := &pb.Friend_Refuse_Rsp{}
if !comm.ProtoUnmarshal(msg, rsp) {
return
}
printReply(msg, rsp)
}
//黑名单列表
func (r *Robot) FriendBlacklist() {
req := &pb.Friend_BlackList_Req{}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_Blacklist}
defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendBlacklist(msg *pb.UserMessage) {
rsp := &pb.Friend_BlackList_Rsp{}
if !comm.ProtoUnmarshal(msg, rsp) {
return
}
printReply(msg, rsp)
}
//添加黑名单
func (r *Robot) FriendAddBlack(friendId string) {
req := &pb.Friend_BlackAdd_Req{FriendId: friendId}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_AddBlack}
defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendAddBlack(msg *pb.UserMessage) {
rsp := &pb.Friend_BlackAdd_Rsp{}
if !comm.ProtoUnmarshal(msg, rsp) {
return
}
printReply(msg, rsp)
}
//删除黑名单
func (r *Robot) FriendDelBlack(friendId string) {
req := &pb.Friend_DelBlack_Req{
FriendId: friendId,
}
head := &pb.UserMessage{MainType: string(comm.SM_FriendModule), SubType: friend.Friend_SubType_DelBlack}
defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleFriendDelBlack(msg *pb.UserMessage) {
rsp := &pb.Friend_DelBlack_Rsp{}
if !comm.ProtoUnmarshal(msg, rsp) {
return
}
printReply(msg, rsp)
//声明加入到构建器并发起请求
func (r *Robot) RunFriend() {
r.addBuilders(friend_builders)
r.handleReq()
}

26
cmd/robot/hero.go Normal file
View File

@ -0,0 +1,26 @@
package robot
import (
"go_dreamfactory/comm"
"go_dreamfactory/modules/hero"
"go_dreamfactory/pb"
)
var (
//hero
hero_builders = []*builder{
{
mainType: string(comm.SM_HeroModule),
subType: hero.Hero_SubType_List,
req: &pb.Hero_List_Req{},
rsp: &pb.Hero_List_Rsp{},
enabled: true,
},
}
)
//声明加入到构建器并发起请求
func (r *Robot) RunHero() {
r.addBuilders(hero_builders)
r.handleReq()
}

View File

@ -1,33 +0,0 @@
package robot
import (
"go_dreamfactory/comm"
"go_dreamfactory/pb"
"log"
)
func (r *Robot) handlePackMsg(msg *pb.UserMessage) {
switch msg.SubType {
case "queryuserpackresp":
r.handleQueryUserPack(msg)
}
}
//添加好友
func (r *Robot) QueryUserPack() {
req := &pb.Items_Getlist_Req{IType: 1}
head := &pb.UserMessage{MainType: "pack", SubType: "queryuserpackreq"}
defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleQueryUserPack(msg *pb.UserMessage) {
rsp := &pb.Items_Getlist_Resp{}
if !comm.ProtoUnmarshal(msg, rsp) {
return
}
printReply(msg, rsp)
}

View File

@ -2,6 +2,8 @@ package robot
import (
"fmt"
"go_dreamfactory/comm"
"go_dreamfactory/modules/user"
"go_dreamfactory/pb"
"go_dreamfactory/utils"
"log"
@ -32,23 +34,19 @@ func (r *Robot) BuildSecStr() string {
//处理登录请求
func (r *Robot) AccountLogin() {
//登录
// log.Printf("client secret key:%s", sec)
loginReg := &pb.UserLoginReq{
Account: r.opts.Account,
Sid: r.opts.ServerId,
}
head := &pb.UserMessage{
MainType: "user",
SubType: "login",
Sec: r.BuildSecStr(),
}
defer traceFunc(head.MainType, head.SubType, "0", loginReg)
err := r.SendToClient(head, loginReg)
if err != nil {
log.Fatalf("send err:%v", err)
}
log.Printf("区服:[%d] 账号:[%s] login...", r.opts.ServerId, r.opts.Account)
builders := []*builder{
{
mainType: string(comm.SM_UserModule),
subType: user.User_SubType_Login,
req: &pb.UserLoginReq{
Account: r.opts.Account,
Sid: r.opts.ServerId,
},
rsp: &pb.UserLoginResp{},
enabled: true,
},
}
r.addBuilders(builders)
r.handleReq()
}

View File

@ -1,26 +1,21 @@
package robot
import (
"fmt"
"go_dreamfactory/comm"
"go_dreamfactory/pb"
)
//统一通知处理
func (r *Robot) handleNotifyMsg(msg *pb.UserMessage) {
switch msg.SubType {
case comm.SubType_ErrorNotify:
r.handleError(msg)
default:
fmt.Printf("subType: %s not define", msg.SubType)
}
var notify_builders = []*builder{
{
//create
mainType: comm.MainType_Notify,
subType: comm.SubType_ErrorNotify,
rsp: &pb.ErrorNotify{},
enabled: true,
},
}
//处理错误
func (r *Robot) handleError(msg *pb.UserMessage) {
rsp := &pb.ErrorNotify{}
if !comm.ProtoUnmarshal(msg, rsp) {
return
}
printReply(msg, rsp)
//声明加入到构建器并发起请求
func (r *Robot) RunNotify() {
r.addBuilders(notify_builders)
}

24
cmd/robot/pack.go Normal file
View File

@ -0,0 +1,24 @@
package robot
import (
"go_dreamfactory/comm"
"go_dreamfactory/pb"
)
//申明测试接口及请求和响应参数
var pack_builders = []*builder{
{
//create
mainType: string(comm.SM_PackModule),
subType: "queryuserpackreq",
// req: &pb.Pack_Getlist_Req{IType: 1},
rsp: &pb.UserCreateRsp{},
enabled: true,
},
}
//声明加入到构建器并发起请求
func (r *Robot) RunPack() {
r.addBuilders(pack_builders)
r.handleReq()
}

View File

@ -1,6 +1,7 @@
# Robot使用
## 命令行
## 命令行
```sh
#使用已存在的账号测试接口
go run cmd.go run --account yourAccount
@ -13,48 +14,39 @@ go run cmd.go run --account newAccount --create true
@[TOC]
### 添加测试接口
* 请求的方法
* 声明测试接口
```go
// 好友申请,参数根据实际业务添加
func (r *Robot) FriendApply(friendIds []string) {
...
var user_builders = []*builder{
{
//create
mainType: string(comm.SM_UserModule),
subType: user.User_SubType_Create,
req: &pb.UserCreateReq{ //设置请求参数
NickName: "测试",
},
rsp: &pb.UserCreateRsp{},
enabled: true,
},
}
```
* 响应的方法
### 声明加入到构建器并发起请求
```go
func (r *Robot) handleFriendApply(msg *pb.UserMessage) {
...
func (r *Robot) RunUser() {
r.addBuilders(user_builders)
r.handleReq()
}
```
### 添加subType调用响应方法
```go
//根据实际情况添加subtype
func (r *Robot) handleFriendMsg(msg *pb.UserMessage) {
switch msg.SubType {
case "apply":
//调用响应
r.handleFriendApply(msg)
}
}
```
### 修改请求方法调用
### 添加用户登录之后需要测试的接口
```go
func (r *Robot) onUserLoaded() {
switch msg.MainType {
case "user":
r.handleUserMsg(msg)
case "friend":
r.handleFriendMsg(msg)
...
//添加用户登录之后需要测试的接口
r.RunUser()
}
```
```

View File

@ -9,6 +9,7 @@ import (
"io/ioutil"
"log"
"net/http"
"time"
"github.com/gorilla/websocket"
jsoniter "github.com/json-iterator/go"
@ -16,9 +17,10 @@ import (
)
type Robot struct {
ws *websocket.Conn
opts *Options
user *pb.DB_UserData
ws *websocket.Conn
opts *Options
user *pb.DB_UserData
builders []*builder
}
func NewRobot(opts *Options) *Robot {
@ -37,7 +39,6 @@ func NewRobot(opts *Options) *Robot {
func (r *Robot) Run() {
log.Print("Robot running...")
log.Printf("websocket %s \n", r.opts.WsUrl)
if r.opts.Create { //创建新用户
r.AccountRegister(r.opts.Account, int32(r.opts.ServerId))
} else {
@ -59,48 +60,80 @@ func (r *Robot) Run() {
if err = proto.Unmarshal(data, msg); err != nil {
log.Fatal(err)
}
r.handleMsg(msg)
r.handleRsp(msg)
}
}()
select {}
}
//模块处理
func (r *Robot) handleMsg(msg *pb.UserMessage) {
switch msg.MainType {
case "user":
r.handleUserMsg(msg)
case "friend":
r.handleFriendMsg(msg)
case "pack":
r.handlePackMsg(msg)
case comm.MainType_Notify:
r.handleNotifyMsg(msg)
default:
log.Fatal("module route no exist")
type builder struct {
mainType string
subType string
req proto.Message
rsp proto.Message
enabled bool
start time.Time
requested bool //请求标识 true已发
}
func (r *Robot) addBuilders(builders []*builder) {
for _, b := range builders {
if b.enabled {
r.builders = append(r.builders, b)
}
}
}
//在这里添加玩家成功登录以后的测试方法
func (r *Robot) onUserLoaded() {
//user
// r.CreateUser("乐谷6171")
//执行请求
func (r *Robot) handleReq() {
for _, b := range r.builders {
if b.req != nil && !b.requested {
b.requested = true
b.start = time.Now()
head := &pb.UserMessage{MainType: b.mainType, SubType: b.subType}
defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), b.req)
err := r.SendToClient(head, b.req)
if err != nil {
log.Fatal(err)
}
}
}
}
//friend
// r.FriendApply("1_62aa8f30d25fb8c1a7d90b50")
// r.FriendAgree([]string{"0_62a9afd994fe03b7aaee6773"})
// r.FriendRefuse([]string{"0_62aa9427e2979698b080ec78"})
// r.FriendApplyList()
// r.FriendList()
// r.FriendBlacklist()
// r.FriendAddBlack("0_62b01623e4c60c3db8bfe6da")
// r.FriendDelBlack("0_62b01623e4c60c3db8bfe6da")
// r.FriendSearch("乐谷5")
//执行响应
func (r *Robot) handleRsp(msg *pb.UserMessage) {
//pack
// r.QueryUserPack()
for i, b := range r.builders {
if b.enabled && (msg.MainType == b.mainType &&
msg.SubType == b.subType) {
if !comm.ProtoUnmarshal(msg, b.rsp) {
return
}
printReply(msg, b)
if msg.MainType == "user" && msg.SubType == "login" {
r.loginCallback(b.rsp)
} else {
if b.requested {
r.builders = append(r.builders[:i], r.builders[i+1:]...)
}
}
}
}
}
//登录回调
func (r *Robot) loginCallback(rsp proto.Message) {
r.builders = append(r.builders[:0], r.builders[1:]...)
lr := rsp.(*pb.UserLoginResp)
if lr.Data != nil {
r.user = lr.Data
r.onUserLoaded()
} else {
r.AccountRegister(r.opts.Account, int32(r.opts.ServerId)) //请求Http接口模拟创建新账号
}
}
func (r *Robot) SendToClient(msg *pb.UserMessage, rsp proto.Message) error {
@ -113,6 +146,24 @@ func (r *Robot) SendToClient(msg *pb.UserMessage, rsp proto.Message) error {
return nil
}
//在这里添加玩家成功登录以后的测试方法
//次方法在用户登录成功后调用
func (r *Robot) onUserLoaded() {
//notify
r.RunNotify()
//user
// r.RunUser()
//friend
// r.RunFriend()
//pack
// r.RunPack()
//hero
r.RunHero()
}
//注册账号
func (r *Robot) AccountRegister(account string, sid int32) {
if account == "" {
@ -160,11 +211,17 @@ func (r *Robot) AccountRegister(account string, sid int32) {
}
//打印响应
func printReply(msg *pb.UserMessage, rsp interface{}) {
if m, ok := rsp.(*pb.ErrorNotify); ok {
log.Printf("rsp [%s.%s] [%v:%v]", msg.MainType, msg.SubType, int32(m.Code), m.Data)
func printReply(msg *pb.UserMessage, builder *builder) {
if m, ok := builder.rsp.(*pb.ErrorNotify); ok {
var tt time.Duration
if builder.start.IsZero() {
tt = time.Duration(0)
} else {
tt = time.Since(builder.start)
}
log.Printf("rsp [%v] [%s.%s] [%v:%v]", tt, m.ReqMainType, m.ReqSubType, int32(m.Code), m.Data)
} else {
log.Printf("rsp [%s.%s] [%v]", msg.MainType, msg.SubType, rsp)
log.Printf("rsp [%v] [%s.%s] [%v]", time.Since(builder.start), msg.MainType, msg.SubType, builder.rsp)
}
}

View File

@ -4,58 +4,24 @@ import (
"go_dreamfactory/comm"
"go_dreamfactory/modules/user"
"go_dreamfactory/pb"
"log"
)
func (r *Robot) handleUserMsg(msg *pb.UserMessage) {
switch msg.SubType {
case "login":
r.handleLogin(msg)
case "create":
r.handleCreateUser(msg)
}
//申明测试接口及请求和响应参数
var user_builders = []*builder{
{
//create
mainType: string(comm.SM_UserModule),
subType: user.User_SubType_Create,
req: &pb.UserCreateReq{ //设置请求参数
NickName: "测试",
},
rsp: &pb.UserCreateRsp{},
enabled: true,
},
}
//处理登录响应数据
func (r *Robot) handleLogin(msg *pb.UserMessage) {
rsp := &pb.UserLoginResp{}
if !comm.ProtoUnmarshal(msg, rsp) {
return
}
printReply(msg, rsp)
//是否有登录数据返回
if rsp != nil {
r.user = rsp.Data
r.onUserLoaded()
} else {
r.AccountRegister(r.opts.Account, int32(r.opts.ServerId)) //请求Http接口模拟创建新账号
}
}
//创角
func (r *Robot) CreateUser(NickName string) {
req := &pb.UserCreateReq{
NickName: NickName,
}
head := &pb.UserMessage{
MainType: string(comm.SM_UserModule),
SubType: user.User_SubType_Create,
}
defer traceFunc(head.MainType, head.SubType, r.user.GetUid(), req)
err := r.SendToClient(head, req)
if err != nil {
log.Fatal(err)
}
}
func (r *Robot) handleCreateUser(msg *pb.UserMessage) {
rsp := &pb.UserCreateRsp{}
if !comm.ProtoUnmarshal(msg, rsp) {
return
}
printReply(msg, rsp)
//声明加入到构建器并发起请求
func (r *Robot) RunUser() {
r.addBuilders(user_builders)
r.handleReq()
}

View File

@ -14,7 +14,7 @@ const (
hero_levelgrow = "game_herolevelgrow.json" //英雄成长系数
hero_starup = "game_herostarup.json" //
hero_levelup = "game_herolevelup.json" //英雄等级基础属性
hero_exp = "game_exp.json"
hero_exp = "game_heroexp.json"
)
///配置管理组件

View File

@ -80,3 +80,7 @@ func (this *Hero) GetHeroList(uid string) []*pb.DB_HeroData {
}
return list
}
func (this *Hero) AddCard(uId string, cardId int32, add int32) (code pb.ErrorCode) {
return
}