上传压测工具
This commit is contained in:
parent
605ad803b5
commit
362b421ce6
@ -717,7 +717,7 @@ const (
|
||||
Rtype67 TaskType = 67 //商店购物消耗xx货币xx个
|
||||
Rtype68 TaskType = 68 //任意渠道消耗xx金币
|
||||
Rtype69 TaskType = 69 //与其他玩家切磋xx次
|
||||
Rtype70 TaskType = 70 //通关世界任务XX关卡
|
||||
Rtype70 TaskType = 70 //完成世界任务战斗
|
||||
Rtype72 TaskType = 72 //完成一次捏人
|
||||
Rtype73 TaskType = 73 //通关难度A维京远征指定BOSSN次(从接到任务开始,只有通关A难度进度才+1)
|
||||
//Rtype74 TaskType = 74 //通关难度A维京远征指定BOSS(检查最高难度记录是否超过了此难度,超过则完成)
|
||||
|
@ -8,7 +8,6 @@ import (
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
"google.golang.org/protobuf/proto"
|
||||
"google.golang.org/protobuf/types/known/anypb"
|
||||
)
|
||||
|
||||
type Client struct {
|
||||
@ -118,17 +117,6 @@ func (this *Client) Receive(msg *pb.UserMessage) (err error) {
|
||||
|
||||
return
|
||||
}
|
||||
func (this *Client) SendMessage(mtype, stype string, msg proto.Message) (err error) {
|
||||
data, _ := anypb.New(msg)
|
||||
message := &pb.UserMessage{
|
||||
MainType: mtype,
|
||||
SubType: stype,
|
||||
Data: data,
|
||||
}
|
||||
|
||||
err = this.WriteMsg(message)
|
||||
return
|
||||
}
|
||||
|
||||
func (this *Client) Heartbeat() {
|
||||
|
||||
|
@ -13,6 +13,7 @@ const (
|
||||
gameWorldTask = "game_worldtask.json"
|
||||
gameWorldtaskBattle = "game_worldbattle.json"
|
||||
game_buriedcondi = "game_buriedcondi.json"
|
||||
game_mainstage = "game_mainstage.json" //主线表
|
||||
// gameWorldAll = "game_worldall.json"
|
||||
// gameburiedCond = "game_buriedcondi.json"
|
||||
// gamerdtasknpc = "game_rdtasknpc.json"
|
||||
@ -33,6 +34,8 @@ func (this *configureComp) Init(service core.IService, module core.IModule, comp
|
||||
configure.RegisterConfigure(gameWorldTask, cfg.NewGameWorldTask, nil)
|
||||
configure.RegisterConfigure(gameWorldtaskBattle, cfg.NewGameWorldBattle, nil)
|
||||
configure.RegisterConfigure(game_buriedcondi, cfg.NewGameBuriedCondi, nil)
|
||||
configure.RegisterConfigure(game_mainstage, cfg.NewGameMainStage, nil)
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,6 @@ type IClient interface {
|
||||
Heartbeat()
|
||||
Receive(msg *pb.UserMessage) (err error)
|
||||
WriteMsg(msg *pb.UserMessage) (err error)
|
||||
SendMessage(mtype, stype string, msg proto.Message) (err error)
|
||||
Close()
|
||||
OnClose()
|
||||
}
|
||||
@ -24,17 +23,16 @@ type IRobot interface {
|
||||
IClient
|
||||
Account() string
|
||||
ServerId() string
|
||||
SetData(key string, data interface{})
|
||||
GetData(key string) interface{}
|
||||
GetModule(module core.M_Modules) IModuleRobot
|
||||
SendMessage(mtype, stype string, msg proto.Message) (resp proto.Message, errdata *pb.ErrorData)
|
||||
DoTask(taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBuriedCondiData, module core.M_Modules) (err error)
|
||||
}
|
||||
|
||||
//机器人模块
|
||||
type IModuleRobot interface {
|
||||
Init()
|
||||
//接收到回应和推送消息
|
||||
Receive(robot IRobot, stype string, message proto.Message) (err error)
|
||||
//错误码接收
|
||||
ErrReceive(robot IRobot, stype string, code pb.ErrorCode) (err error)
|
||||
//执行流水线任务
|
||||
DoPipeline(robot IRobot) (err error)
|
||||
//执行任务
|
||||
@ -46,3 +44,8 @@ type SecBuild struct {
|
||||
ServerId string `json:"serverId"`
|
||||
TimeStamp int64 `json:"timestamp"`
|
||||
}
|
||||
|
||||
type MessageResp struct {
|
||||
resp proto.Message
|
||||
errdata *pb.ErrorData
|
||||
}
|
||||
|
90
modules/robot/modulerobot_hero.go
Normal file
90
modules/robot/modulerobot_hero.go
Normal file
@ -0,0 +1,90 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"go_dreamfactory/comm"
|
||||
"go_dreamfactory/pb"
|
||||
cfg "go_dreamfactory/sys/configure/structs"
|
||||
"sort"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
//用户模块 机器人
|
||||
type ModuleRobot_Hero struct {
|
||||
heros map[string]*pb.DBHero
|
||||
}
|
||||
|
||||
func (this *ModuleRobot_Hero) Init() {
|
||||
this.heros = make(map[string]*pb.DBHero)
|
||||
}
|
||||
|
||||
//接收到消息
|
||||
func (this *ModuleRobot_Hero) Receive(robot IRobot, stype string, message proto.Message) (err error) {
|
||||
switch stype {
|
||||
case "list":
|
||||
resp := message.(*pb.HeroListResp)
|
||||
for _, v := range resp.List {
|
||||
this.heros[v.Id] = v
|
||||
}
|
||||
break
|
||||
case "change":
|
||||
resp := message.(*pb.HeroChangePush)
|
||||
for _, v := range resp.List {
|
||||
this.heros[v.Id] = v
|
||||
}
|
||||
break
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//机器人执行流
|
||||
func (this *ModuleRobot_Hero) DoPipeline(robot IRobot) (err error) {
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
)
|
||||
if _, errdata = robot.SendMessage("hero", "list", &pb.HeroListReq{}); errdata != nil {
|
||||
err = errors.New(errdata.Message)
|
||||
return
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//做任务
|
||||
func (this *ModuleRobot_Hero) DoTask(robot IRobot, taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBuriedCondiData) (err error) {
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
)
|
||||
switch comm.TaskType(condconf.Type) {
|
||||
case comm.Rtype14:
|
||||
if _, errdata = robot.SendMessage("hero", "drawcard", &pb.HeroDrawCardReq{DrawType: 2, DrawCount: 1, Consume: 0}); errdata != nil {
|
||||
err = errors.New(errdata.Message)
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//获取战斗英雄
|
||||
func (this *ModuleRobot_Hero) getbattlehero() (bheros []string) {
|
||||
var (
|
||||
heros []*pb.DBHero = make([]*pb.DBHero, 0, len(this.heros))
|
||||
)
|
||||
bheros = make([]string, 5)
|
||||
for _, v := range this.heros {
|
||||
heros = append(heros, v)
|
||||
}
|
||||
// 使用sort.Slice进行排序
|
||||
sort.Slice(heros, func(i, j int) bool {
|
||||
return heros[i].Lv > heros[j].Lv
|
||||
})
|
||||
|
||||
for i, v := range heros {
|
||||
if i < 5 {
|
||||
bheros[i] = v.Id
|
||||
} else {
|
||||
return
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
70
modules/robot/modulerobot_mainline.go
Normal file
70
modules/robot/modulerobot_mainline.go
Normal file
@ -0,0 +1,70 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"go_dreamfactory/comm"
|
||||
"go_dreamfactory/pb"
|
||||
"go_dreamfactory/sys/configure"
|
||||
cfg "go_dreamfactory/sys/configure/structs"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
//用户模块 机器人
|
||||
type ModuleRobot_MainLine struct {
|
||||
info *pb.DBMainline
|
||||
}
|
||||
|
||||
func (this *ModuleRobot_MainLine) Init() {
|
||||
|
||||
}
|
||||
|
||||
//接收到消息
|
||||
func (this *ModuleRobot_MainLine) Receive(robot IRobot, stype string, message proto.Message) (err error) {
|
||||
switch stype {
|
||||
case "info":
|
||||
resp := message.(*pb.MainlineInfoResp)
|
||||
this.info = resp.Info
|
||||
break
|
||||
case "create":
|
||||
// resp := message.(*pb.UserCreateResp)
|
||||
break
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//机器人执行流
|
||||
func (this *ModuleRobot_MainLine) DoPipeline(robot IRobot) (err error) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//做任务
|
||||
func (this *ModuleRobot_MainLine) DoTask(robot IRobot, taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBuriedCondiData) (err error) {
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
)
|
||||
if _, errdata = robot.SendMessage("mainline", "info", &pb.MainlineInfoReq{}); errdata != nil {
|
||||
err = errors.New(errdata.Message)
|
||||
return
|
||||
}
|
||||
|
||||
switch comm.TaskType(condconf.Type) {
|
||||
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
// 读取主线关卡表
|
||||
func (this *ModuleRobot_MainLine) getGameMainStageData(cid int32) (conf []*cfg.GameMainStageData, err error) {
|
||||
var (
|
||||
v interface{}
|
||||
)
|
||||
if v, err = configure.GetConfigure(game_mainstage); err != nil {
|
||||
return
|
||||
} else {
|
||||
conf = v.(*cfg.GameMainStage).GetDataList()
|
||||
}
|
||||
return
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"errors"
|
||||
"go_dreamfactory/pb"
|
||||
cfg "go_dreamfactory/sys/configure/structs"
|
||||
|
||||
@ -10,6 +10,12 @@ import (
|
||||
|
||||
//用户模块 机器人
|
||||
type ModuleRobot_User struct {
|
||||
user *pb.DBUser
|
||||
userex *pb.DBUserExpand
|
||||
}
|
||||
|
||||
func (this *ModuleRobot_User) Init() {
|
||||
|
||||
}
|
||||
|
||||
//接收到消息
|
||||
@ -17,8 +23,8 @@ func (this *ModuleRobot_User) Receive(robot IRobot, stype string, message proto.
|
||||
switch stype {
|
||||
case "login":
|
||||
resp := message.(*pb.UserLoginResp)
|
||||
robot.SetData("user", resp.Data)
|
||||
robot.SetData("userex", resp.Ex)
|
||||
this.user = resp.Data
|
||||
this.userex = resp.Ex
|
||||
break
|
||||
case "create":
|
||||
// resp := message.(*pb.UserCreateResp)
|
||||
@ -27,33 +33,31 @@ func (this *ModuleRobot_User) Receive(robot IRobot, stype string, message proto.
|
||||
return
|
||||
}
|
||||
|
||||
//接收到消息
|
||||
func (this *ModuleRobot_User) ErrReceive(robot IRobot, stype string, code pb.ErrorCode) (err error) {
|
||||
switch stype {
|
||||
case "login":
|
||||
err = fmt.Errorf("登录错误:%d", code)
|
||||
break
|
||||
case "create":
|
||||
break
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//机器人执行流
|
||||
func (this *ModuleRobot_User) DoPipeline(robot IRobot) (err error) {
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
)
|
||||
//登录
|
||||
if err = robot.SendMessage("user", "login", &pb.UserLoginReq{
|
||||
if _, errdata = robot.SendMessage("user", "login", &pb.UserLoginReq{
|
||||
Account: robot.Account(),
|
||||
Sid: robot.ServerId(),
|
||||
}); err != nil {
|
||||
}); errdata != nil {
|
||||
err = errors.New(errdata.Message)
|
||||
return
|
||||
}
|
||||
//创角
|
||||
if err = robot.SendMessage("user", "create", &pb.UserCreateReq{
|
||||
if _, errdata = robot.SendMessage("user", "create", &pb.UserCreateReq{
|
||||
NickName: robot.Account(),
|
||||
Figure: 100,
|
||||
Gender: 1,
|
||||
}); err != nil {
|
||||
}); errdata != nil {
|
||||
if errdata.Code == pb.ErrorCode_RoleCreated { //已创角
|
||||
err = nil
|
||||
} else {
|
||||
err = errors.New(errdata.Message)
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
return
|
||||
|
@ -1,7 +1,7 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"errors"
|
||||
"go_dreamfactory/comm"
|
||||
"go_dreamfactory/lego/core"
|
||||
"go_dreamfactory/lego/sys/log"
|
||||
@ -16,6 +16,12 @@ import (
|
||||
type ModuleRobot_WTask struct {
|
||||
info *pb.DBWTask
|
||||
progress []*pb.DBWTaskItem //任务进度
|
||||
state int32
|
||||
change chan bool
|
||||
}
|
||||
|
||||
func (this *ModuleRobot_WTask) Init() {
|
||||
this.change = make(chan bool)
|
||||
}
|
||||
|
||||
//接收到消息
|
||||
@ -69,16 +75,9 @@ func (this *ModuleRobot_WTask) Receive(robot IRobot, stype string, message proto
|
||||
this.info.Accepts = append(this.info.Accepts, v.Tid)
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//接收到消息
|
||||
func (this *ModuleRobot_WTask) ErrReceive(robot IRobot, stype string, code pb.ErrorCode) (err error) {
|
||||
switch stype {
|
||||
case "info":
|
||||
err = fmt.Errorf("信息获取:%d", code)
|
||||
if this.state == 1 {
|
||||
this.change <- true
|
||||
}
|
||||
break
|
||||
}
|
||||
return
|
||||
@ -86,8 +85,12 @@ func (this *ModuleRobot_WTask) ErrReceive(robot IRobot, stype string, code pb.Er
|
||||
|
||||
//机器人执行流
|
||||
func (this *ModuleRobot_WTask) DoPipeline(robot IRobot) (err error) {
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
)
|
||||
//获取任务列表
|
||||
if err = robot.SendMessage("wtask", "info", &pb.WTaskInfoReq{}); err != nil {
|
||||
if _, errdata = robot.SendMessage("wtask", "info", &pb.WTaskInfoReq{}); errdata != nil {
|
||||
err = errors.New(errdata.Message)
|
||||
return
|
||||
}
|
||||
var (
|
||||
@ -103,7 +106,8 @@ locp:
|
||||
break locp
|
||||
}
|
||||
if this.checkaccept(tconf) { //是否需要接收任务
|
||||
if err = robot.SendMessage("wtask", "accept", &pb.WTaskAcceptReq{Tid: tconf.Key}); err != nil {
|
||||
if _, errdata = robot.SendMessage("wtask", "accept", &pb.WTaskAcceptReq{Tid: tconf.Key}); errdata != nil {
|
||||
err = errors.New(errdata.Message)
|
||||
return
|
||||
}
|
||||
continue
|
||||
@ -116,21 +120,26 @@ locp:
|
||||
//有问完成的子任务
|
||||
if cconf != nil {
|
||||
switch comm.TaskType(cconf.Type) {
|
||||
case comm.Rtype1:
|
||||
case comm.Rtype1, comm.Rtype14:
|
||||
module = comm.ModuleHero
|
||||
case comm.Rtype20001:
|
||||
case comm.Rtype20001, comm.Rtype70, comm.Rtype227:
|
||||
module = comm.ModuleWtask
|
||||
default:
|
||||
log.Error("[Robot DoTask]", log.Field{Key: "ctype", Value: cconf.Type}, log.Field{Key: "conld", Value: cconf.Id}, log.Field{Key: "err", Value: "Not Achieved !"})
|
||||
break locp
|
||||
}
|
||||
this.change = make(chan bool)
|
||||
this.state = 1
|
||||
if err = robot.DoTask(tconf, cconf, module); err != nil {
|
||||
log.Error("[Robot DoTask]", log.Field{Key: "task", Value: tconf.Key}, log.Field{Key: "conld", Value: cconf.Id}, log.Field{Key: "err", Value: err.Error()})
|
||||
break locp
|
||||
}
|
||||
<-this.change //等待任务进度更新
|
||||
this.state = 0
|
||||
continue
|
||||
} else { //任务已完成直接完成
|
||||
if err = robot.SendMessage("wtask", "finish", &pb.WTaskFinishReq{Tid: tconf.Key}); err != nil {
|
||||
if _, errdata = robot.SendMessage("wtask", "finish", &pb.WTaskFinishReq{Tid: tconf.Key}); errdata != nil {
|
||||
err = errors.New(errdata.Message)
|
||||
return
|
||||
}
|
||||
}
|
||||
@ -140,9 +149,53 @@ locp:
|
||||
|
||||
//做任务
|
||||
func (this *ModuleRobot_WTask) DoTask(robot IRobot, taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBuriedCondiData) (err error) {
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
)
|
||||
switch comm.TaskType(condconf.Type) {
|
||||
case comm.Rtype20001:
|
||||
if err = robot.SendMessage("wtask", "completecondi", &pb.WTaskCompleteCondiReq{TaskId: taskconf.Key, CondiId: condconf.Id}); err != nil {
|
||||
case comm.Rtype20001: //完成对话
|
||||
if _, errdata = robot.SendMessage("wtask", "completecondi", &pb.WTaskCompleteCondiReq{TaskId: taskconf.Key, CondiId: condconf.Id}); errdata != nil {
|
||||
err = errors.New(errdata.Message)
|
||||
return
|
||||
}
|
||||
break
|
||||
case comm.Rtype70: //完成世界任务战斗
|
||||
var (
|
||||
heromodule *ModuleRobot_Hero
|
||||
heros []string
|
||||
resp proto.Message
|
||||
)
|
||||
heromodule = robot.GetModule(comm.ModuleHero).(*ModuleRobot_Hero)
|
||||
heros = heromodule.getbattlehero()
|
||||
if resp, errdata = robot.SendMessage("wtask", "battlestart", &pb.WTaskBattleStartReq{BattleConfId: condconf.Filter[0], Battle: &pb.BattleFormation{Format: heros}}); errdata != nil {
|
||||
err = errors.New(errdata.Message)
|
||||
return
|
||||
}
|
||||
if _, errdata = robot.SendMessage("wtask", "battlefinish", &pb.WTaskBattleFinishReq{BattleConfId: condconf.Filter[0], Report: &pb.BattleReport{
|
||||
Info: resp.(*pb.WTaskBattleStartResp).Info,
|
||||
WinSide: 1,
|
||||
}}); errdata != nil {
|
||||
err = errors.New(errdata.Message)
|
||||
return
|
||||
}
|
||||
break
|
||||
case comm.Rtype227: //完成世界任务战斗 失败
|
||||
var (
|
||||
heromodule *ModuleRobot_Hero
|
||||
heros []string
|
||||
resp proto.Message
|
||||
)
|
||||
heromodule = robot.GetModule(comm.ModuleHero).(*ModuleRobot_Hero)
|
||||
heros = heromodule.getbattlehero()
|
||||
if resp, errdata = robot.SendMessage("wtask", "battlestart", &pb.WTaskBattleStartReq{BattleConfId: condconf.Filter[0], Battle: &pb.BattleFormation{Format: heros}}); errdata != nil {
|
||||
err = errors.New(errdata.Message)
|
||||
return
|
||||
}
|
||||
if _, errdata = robot.SendMessage("wtask", "battlefinish", &pb.WTaskBattleFinishReq{BattleConfId: condconf.Filter[0], Report: &pb.BattleReport{
|
||||
Info: resp.(*pb.WTaskBattleStartResp).Info,
|
||||
WinSide: 2,
|
||||
}}); errdata != nil {
|
||||
err = errors.New(errdata.Message)
|
||||
return
|
||||
}
|
||||
break
|
||||
|
@ -21,9 +21,8 @@ type Robot struct {
|
||||
index int32 //编号
|
||||
account, serverId string
|
||||
curreq string //当前请求
|
||||
await chan string
|
||||
await chan *MessageResp
|
||||
modules map[core.M_Modules]IModuleRobot
|
||||
datas map[string]interface{}
|
||||
pipeline []string //执行流水线
|
||||
}
|
||||
|
||||
@ -34,21 +33,22 @@ func (this *Robot) Account() string {
|
||||
func (this *Robot) ServerId() string {
|
||||
return this.serverId
|
||||
}
|
||||
func (this *Robot) SetData(key string, data interface{}) {
|
||||
this.datas[key] = data
|
||||
}
|
||||
func (this *Robot) GetData(key string) interface{} {
|
||||
return this.datas[key]
|
||||
|
||||
func (this *Robot) GetModule(module core.M_Modules) IModuleRobot {
|
||||
return this.modules[module]
|
||||
}
|
||||
|
||||
//初始化
|
||||
func (this *Robot) Init(addr string, client IClient) (err error) {
|
||||
this.Client.Init(addr, client)
|
||||
this.datas = make(map[string]interface{})
|
||||
this.await = make(chan string)
|
||||
this.await = make(chan *MessageResp)
|
||||
this.modules = make(map[core.M_Modules]IModuleRobot)
|
||||
this.modules[comm.ModuleUser] = new(ModuleRobot_User)
|
||||
this.modules[comm.ModuleHero] = new(ModuleRobot_Hero)
|
||||
this.modules[comm.ModuleWtask] = new(ModuleRobot_WTask)
|
||||
for _, v := range this.modules {
|
||||
v.Init()
|
||||
}
|
||||
go this.run()
|
||||
return
|
||||
}
|
||||
@ -73,16 +73,19 @@ func (this *Robot) Receive(msg *pb.UserMessage) (err error) {
|
||||
return err
|
||||
}
|
||||
if msgpath == "notify.errornotify" { //错误通知
|
||||
req := message.(*pb.NotifyErrorNotifyPush)
|
||||
reqpath := fmt.Sprintf("%s.%s", req.ReqMainType, req.ReqSubType)
|
||||
if module, ok = this.modules[core.M_Modules(req.ReqMainType)]; ok {
|
||||
if err = module.ErrReceive(this, req.ReqSubType, req.Code); err != nil {
|
||||
log.Error("[Robot NotifyErrorNotifyPush]", log.Field{Key: "Account", Value: this.account}, log.Field{Key: "message", Value: reqpath}, log.Field{Key: "err", Value: err.Error()})
|
||||
return
|
||||
}
|
||||
}
|
||||
resp := message.(*pb.NotifyErrorNotifyPush)
|
||||
reqpath := fmt.Sprintf("%s.%s", resp.ReqMainType, resp.ReqSubType)
|
||||
// if module, ok = this.modules[core.M_Modules(resp.ReqMainType)]; ok {
|
||||
// if err = module.ErrReceive(this, resp.ReqSubType, resp.Code); err != nil {
|
||||
// log.Error("[Robot NotifyErrorNotifyPush]", log.Field{Key: "Account", Value: this.account}, log.Field{Key: "message", Value: reqpath}, log.Field{Key: "err", Value: err.Error()})
|
||||
// return
|
||||
// }
|
||||
// }
|
||||
if reqpath == this.curreq { //收到回应
|
||||
this.await <- msgpath
|
||||
this.await <- &MessageResp{
|
||||
resp: nil,
|
||||
errdata: resp.Err,
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
@ -94,7 +97,10 @@ func (this *Robot) Receive(msg *pb.UserMessage) (err error) {
|
||||
}
|
||||
|
||||
if msgpath == this.curreq { //收到回应
|
||||
this.await <- msgpath
|
||||
this.await <- &MessageResp{
|
||||
resp: message,
|
||||
errdata: nil,
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
@ -105,7 +111,11 @@ func (this *Robot) WriteMsg(msg *pb.UserMessage) (err error) {
|
||||
}
|
||||
|
||||
//发送消息
|
||||
func (this *Robot) SendMessage(mtype, stype string, msg proto.Message) (err error) {
|
||||
func (this *Robot) SendMessage(mtype, stype string, msg proto.Message) (resp proto.Message, errdata *pb.ErrorData) {
|
||||
var (
|
||||
messageresp *MessageResp
|
||||
err error
|
||||
)
|
||||
stime := time.Now()
|
||||
data, _ := anypb.New(msg)
|
||||
message := &pb.UserMessage{
|
||||
@ -113,11 +123,20 @@ func (this *Robot) SendMessage(mtype, stype string, msg proto.Message) (err erro
|
||||
SubType: stype,
|
||||
Data: data,
|
||||
}
|
||||
err = this.WriteMsg(message)
|
||||
if err = this.WriteMsg(message); err != nil {
|
||||
errdata = &pb.ErrorData{
|
||||
Code: pb.ErrorCode_ClientError,
|
||||
Title: pb.ErrorCode_ClientError.String(),
|
||||
Message: err.Error(),
|
||||
}
|
||||
return
|
||||
}
|
||||
if mtype != "gateway" {
|
||||
this.curreq = fmt.Sprintf("%s.%s", mtype, stype)
|
||||
<-this.await //等待回应
|
||||
log.Debug("[机器人 Message]", log.Field{Key: "t", Value: time.Since(stime).Milliseconds()}, log.Field{Key: "Account", Value: this.account}, log.Field{Key: "message", Value: fmt.Sprintf("%s.%s", mtype, stype)})
|
||||
messageresp = <-this.await //等待回应
|
||||
resp = messageresp.resp
|
||||
errdata = messageresp.errdata
|
||||
log.Debug("[机器人 Message]", log.Field{Key: "t", Value: time.Since(stime).Milliseconds()}, log.Field{Key: "Account", Value: this.account}, log.Field{Key: "message", Value: fmt.Sprintf("%s.%s", mtype, stype)}, log.Field{Key: "resp", Value: errdata == nil})
|
||||
}
|
||||
return
|
||||
}
|
||||
@ -160,10 +179,14 @@ func (this *Robot) DoTask(taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBur
|
||||
func (this *Robot) run() {
|
||||
var (
|
||||
module IModuleRobot
|
||||
err error
|
||||
)
|
||||
for _, v := range this.pipeline {
|
||||
module = this.modules[core.M_Modules(v)]
|
||||
module.DoPipeline(this)
|
||||
if err = module.DoPipeline(this); err != nil {
|
||||
log.Debug("[机器人 执行异常]", log.Field{Key: "Account", Value: this.account}, log.Field{Key: "module", Value: v}, log.Field{Key: "err", Value: err.Error()})
|
||||
break
|
||||
}
|
||||
}
|
||||
this.Close()
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ locp:
|
||||
for {
|
||||
select {
|
||||
case <-timer.C:
|
||||
if this.currRobotNum <= this.module.options.RobotSingleNum {
|
||||
if this.currRobotNum < this.module.options.RobotSingleNum {
|
||||
for i := 0; i < int(this.module.options.RobotSingleNum); i++ {
|
||||
this.createRobot(this.currRobotNum)
|
||||
this.currRobotNum++
|
||||
|
1046
pb/errorcode.pb.go
1046
pb/errorcode.pb.go
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user