上传机器人代码
This commit is contained in:
parent
02c5a0224b
commit
1d55ce2d9e
54
modules/robot/modulerobot_dailytask.go
Normal file
54
modules/robot/modulerobot_dailytask.go
Normal file
@ -0,0 +1,54 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"go_dreamfactory/pb"
|
||||
cfg "go_dreamfactory/sys/configure/structs"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
//用户模块 机器人
|
||||
type ModuleRobot_Dailytask struct {
|
||||
task []*pb.DBDailytaskGroupProgress
|
||||
}
|
||||
|
||||
func (this *ModuleRobot_Dailytask) Init() (err error) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//接收到消息
|
||||
func (this *ModuleRobot_Dailytask) Receive(robot IRobot, stype string, message proto.Message) (err error) {
|
||||
switch stype {
|
||||
case "info":
|
||||
resp := message.(*pb.DailytaskInfoResp)
|
||||
this.task = resp.Task
|
||||
break
|
||||
}
|
||||
return
|
||||
}
|
||||
func (this *ModuleRobot_Dailytask) OncePipeline(robot IRobot) (err error) {
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
)
|
||||
if _, errdata = robot.SendMessage("dailytask", "info", &pb.DailytaskInfoReq{}); errdata != nil {
|
||||
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//机器人执行流
|
||||
func (this *ModuleRobot_Dailytask) DoPipeline(robot IRobot) (err error) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//做任务
|
||||
func (this *ModuleRobot_Dailytask) DoTask(robot IRobot, taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBuriedCondiData) (err error) {
|
||||
|
||||
return
|
||||
}
|
54
modules/robot/modulerobot_dragon.go
Normal file
54
modules/robot/modulerobot_dragon.go
Normal file
@ -0,0 +1,54 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"go_dreamfactory/pb"
|
||||
cfg "go_dreamfactory/sys/configure/structs"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
//用户模块 机器人
|
||||
type ModuleRobot_Dragon struct {
|
||||
dragons []*pb.DBDragon
|
||||
}
|
||||
|
||||
func (this *ModuleRobot_Dragon) Init() (err error) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//接收到消息
|
||||
func (this *ModuleRobot_Dragon) Receive(robot IRobot, stype string, message proto.Message) (err error) {
|
||||
switch stype {
|
||||
case "getlist":
|
||||
resp := message.(*pb.DragonGetListResp)
|
||||
this.dragons = resp.Dragons
|
||||
break
|
||||
}
|
||||
return
|
||||
}
|
||||
func (this *ModuleRobot_Dragon) OncePipeline(robot IRobot) (err error) {
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
)
|
||||
if _, errdata = robot.SendMessage("dragon", "getlist", &pb.DragonGetListReq{}); errdata != nil {
|
||||
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//机器人执行流
|
||||
func (this *ModuleRobot_Dragon) DoPipeline(robot IRobot) (err error) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//做任务
|
||||
func (this *ModuleRobot_Dragon) DoTask(robot IRobot, taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBuriedCondiData) (err error) {
|
||||
|
||||
return
|
||||
}
|
54
modules/robot/modulerobot_integral.go
Normal file
54
modules/robot/modulerobot_integral.go
Normal file
@ -0,0 +1,54 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"go_dreamfactory/pb"
|
||||
cfg "go_dreamfactory/sys/configure/structs"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
//用户模块 机器人
|
||||
type ModuleRobot_Integral struct {
|
||||
boos *pb.DBIntegralBoss
|
||||
}
|
||||
|
||||
func (this *ModuleRobot_Integral) Init() (err error) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//接收到消息
|
||||
func (this *ModuleRobot_Integral) Receive(robot IRobot, stype string, message proto.Message) (err error) {
|
||||
switch stype {
|
||||
case "getlist":
|
||||
resp := message.(*pb.IntegralGetListResp)
|
||||
this.boos = resp.Data
|
||||
break
|
||||
}
|
||||
return
|
||||
}
|
||||
func (this *ModuleRobot_Integral) OncePipeline(robot IRobot) (err error) {
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
)
|
||||
if _, errdata = robot.SendMessage("integral", "getlist", &pb.IntegralGetListReq{}); errdata != nil {
|
||||
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//机器人执行流
|
||||
func (this *ModuleRobot_Integral) DoPipeline(robot IRobot) (err error) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//做任务
|
||||
func (this *ModuleRobot_Integral) DoTask(robot IRobot, taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBuriedCondiData) (err error) {
|
||||
|
||||
return
|
||||
}
|
76
modules/robot/modulerobot_mail.go
Normal file
76
modules/robot/modulerobot_mail.go
Normal file
@ -0,0 +1,76 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"go_dreamfactory/pb"
|
||||
cfg "go_dreamfactory/sys/configure/structs"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
//用户模块 机器人
|
||||
type ModuleRobot_Mail struct {
|
||||
mails []*pb.DBMailData
|
||||
}
|
||||
|
||||
func (this *ModuleRobot_Mail) Init() (err error) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//接收到消息
|
||||
func (this *ModuleRobot_Mail) Receive(robot IRobot, stype string, message proto.Message) (err error) {
|
||||
switch stype {
|
||||
case "getlist":
|
||||
resp := message.(*pb.MailGetListResp)
|
||||
this.mails = resp.Mails
|
||||
break
|
||||
case "getusermailattachment":
|
||||
resp := message.(*pb.MailGetUserMailAttachmentResp)
|
||||
for _, v := range this.mails {
|
||||
if v.ObjId == resp.Mail.ObjId {
|
||||
v.Reward = resp.Mail.Reward
|
||||
break
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
return
|
||||
}
|
||||
func (this *ModuleRobot_Mail) OncePipeline(robot IRobot) (err error) {
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
)
|
||||
if _, errdata = robot.SendMessage("mail", "getlist", &pb.MailGetListReq{}); errdata != nil {
|
||||
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//机器人执行流
|
||||
func (this *ModuleRobot_Mail) DoPipeline(robot IRobot) (err error) {
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
)
|
||||
for _, v := range this.mails {
|
||||
if !v.Reward {
|
||||
if _, errdata = robot.SendMessage("mail", "getusermailattachment", &pb.MailGetUserMailAttachmentReq{
|
||||
ObjID: v.ObjId,
|
||||
}); errdata != nil {
|
||||
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
|
||||
return
|
||||
}
|
||||
break
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
//做任务
|
||||
func (this *ModuleRobot_Mail) DoTask(robot IRobot, taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBuriedCondiData) (err error) {
|
||||
|
||||
return
|
||||
}
|
54
modules/robot/modulerobot_storyline.go
Normal file
54
modules/robot/modulerobot_storyline.go
Normal file
@ -0,0 +1,54 @@
|
||||
package robot
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"fmt"
|
||||
"go_dreamfactory/pb"
|
||||
cfg "go_dreamfactory/sys/configure/structs"
|
||||
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
//用户模块 机器人
|
||||
type ModuleRobot_Storyline struct {
|
||||
info *pb.DBStoryline
|
||||
}
|
||||
|
||||
func (this *ModuleRobot_Storyline) Init() (err error) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//接收到消息
|
||||
func (this *ModuleRobot_Storyline) Receive(robot IRobot, stype string, message proto.Message) (err error) {
|
||||
switch stype {
|
||||
case "info":
|
||||
resp := message.(*pb.StorylineInfoResp)
|
||||
this.info = resp.Info
|
||||
break
|
||||
}
|
||||
return
|
||||
}
|
||||
func (this *ModuleRobot_Storyline) OncePipeline(robot IRobot) (err error) {
|
||||
var (
|
||||
errdata *pb.ErrorData
|
||||
)
|
||||
if _, errdata = robot.SendMessage("storyline", "info", &pb.StorylineInfoReq{}); errdata != nil {
|
||||
err = errors.New(fmt.Sprintf("code:%d message:%s", errdata.Code, errdata.Message))
|
||||
return
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//机器人执行流
|
||||
func (this *ModuleRobot_Storyline) DoPipeline(robot IRobot) (err error) {
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
//做任务
|
||||
func (this *ModuleRobot_Storyline) DoTask(robot IRobot, taskconf *cfg.GameWorldTaskData, condconf *cfg.GameBuriedCondiData) (err error) {
|
||||
|
||||
return
|
||||
}
|
@ -22,6 +22,7 @@ import (
|
||||
type RobotStatistics struct {
|
||||
message string
|
||||
time int64
|
||||
reqsize int64
|
||||
}
|
||||
|
||||
type Robot struct {
|
||||
@ -85,6 +86,11 @@ func (this *Robot) Init(addr string, client IClient) (err error) {
|
||||
this.modules[comm.ModuleSmithy] = new(ModuleRobot_Smithy)
|
||||
this.modules[comm.ModuleFriend] = new(ModuleRobot_Friend)
|
||||
this.modules[comm.ModulePasson] = new(ModuleRobot_Passon)
|
||||
this.modules[comm.ModuleStoryLine] = new(ModuleRobot_Storyline)
|
||||
this.modules[comm.ModuleDailytask] = new(ModuleRobot_Dailytask)
|
||||
this.modules[comm.ModuleDragon] = new(ModuleRobot_Dragon)
|
||||
this.modules[comm.ModuleIntegral] = new(ModuleRobot_Integral)
|
||||
this.modules[comm.ModuleMail] = new(ModuleRobot_Mail)
|
||||
|
||||
for _, v := range this.modules {
|
||||
v.Init()
|
||||
@ -192,10 +198,10 @@ func (this *Robot) SendMessage(mtype, stype string, msg proto.Message) (resp pro
|
||||
log.Error("[机器人 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: "errdata", Value: errdata.String()})
|
||||
}
|
||||
}
|
||||
|
||||
this.statistics = append(this.statistics, &RobotStatistics{
|
||||
message: fmt.Sprintf("%s.%s", mtype, stype),
|
||||
time: time.Since(stime).Milliseconds(),
|
||||
reqsize: int64(len(data.Value)),
|
||||
})
|
||||
time.Sleep(time.Millisecond * time.Duration(50+rand.Int31n(300)))
|
||||
} else {
|
||||
|
@ -81,10 +81,12 @@ func (this *statisticalComp) RobotFinishedTest(robot *Robot) {
|
||||
//输出报表
|
||||
func (this *statisticalComp) OutReport() {
|
||||
var (
|
||||
messages map[string][]int64 = make(map[string][]int64)
|
||||
messagestime map[string][]int64 = make(map[string][]int64)
|
||||
requestsize map[string]int64 = make(map[string]int64)
|
||||
receive map[string]int32 = make(map[string]int32)
|
||||
receiveSize map[string]int64 = make(map[string]int64)
|
||||
totalmessage int32
|
||||
totalrequestSize int64
|
||||
totalreceive int32
|
||||
totalreceiveSize int64
|
||||
ok bool
|
||||
@ -93,10 +95,13 @@ func (this *statisticalComp) OutReport() {
|
||||
for _, datas := range this.robotdata {
|
||||
for _, v := range datas {
|
||||
totalmessage++
|
||||
if _, ok = messages[v.message]; !ok {
|
||||
messages[v.message] = make([]int64, 0)
|
||||
if _, ok = messagestime[v.message]; !ok {
|
||||
messagestime[v.message] = make([]int64, 0)
|
||||
|
||||
}
|
||||
messages[v.message] = append(messages[v.message], v.time)
|
||||
messagestime[v.message] = append(messagestime[v.message], v.time)
|
||||
requestsize[v.message] += v.reqsize
|
||||
totalrequestSize += v.reqsize
|
||||
}
|
||||
}
|
||||
for k, v := range this.receiveMsg {
|
||||
@ -118,15 +123,19 @@ func (this *statisticalComp) OutReport() {
|
||||
file.WriteString(fmt.Sprintf("成功数量: %d\n", this.succclientNum))
|
||||
file.WriteString(fmt.Sprintf("失败数量: %d\n", this.failclientNum))
|
||||
file.WriteString(fmt.Sprintf("最大同时在线人数: %d\n", this.maxonlineNum))
|
||||
file.WriteString(fmt.Sprintf("压测执行时长: %.2f秒\n", this.end.Sub(this.start).Seconds()))
|
||||
file.WriteString(fmt.Sprintf("消息总请求数: %d\n", totalmessage))
|
||||
file.WriteString(fmt.Sprintf("消息总接收数: %d 接收消息总大小:%s\n", totalreceive, utils.FormatByesSize(totalreceiveSize)))
|
||||
file.WriteString(fmt.Sprintf("消息总请求大小: %s\n", utils.FormatByesSize(totalrequestSize)))
|
||||
file.WriteString(fmt.Sprintf("消息总接收数: %d\n", totalreceive))
|
||||
file.WriteString(fmt.Sprintf("消息总接收大小: %s\n", utils.FormatByesSize(totalreceiveSize)))
|
||||
file.WriteString(fmt.Sprintf("压测执行时长: %.2f秒\n", this.end.Sub(this.start).Seconds()))
|
||||
file.WriteString(fmt.Sprintf("QPS: %.2f\n", float64(totalmessage)/this.end.Sub(this.start).Seconds()))
|
||||
file.WriteString("---消息压测详情----------------------------------------------------------------------------------------------------\n")
|
||||
for message, data := range messages {
|
||||
for message, data := range messagestime {
|
||||
sort.Slice(data, func(i, j int) bool {
|
||||
return data[i] < data[j]
|
||||
})
|
||||
reqsize := requestsize[message]
|
||||
respsize := receiveSize[message]
|
||||
max := data[len(data)-1]
|
||||
min := data[0]
|
||||
sum := int64(0)
|
||||
@ -140,11 +149,12 @@ func (this *statisticalComp) OutReport() {
|
||||
} else {
|
||||
median = float64(data[len(data)/2])
|
||||
}
|
||||
file.WriteString(fmt.Sprintf("消息名:%-20s 请求次数:%-5d 耗时最小:%-5dms 耗时最大:%-5dms 平均耗时:%-5.2fms 中位耗时:%-5.2fms \n", message, len(data), min, max, avg, median))
|
||||
file.WriteString(fmt.Sprintf("消息名:%-30s 请求次数:%-5d 请求数据:%-10s --%-2.2f%% 接收数据:%-10s --%-2.2f%% 耗时最小:%-5dms 耗时最大:%-5dms 平均耗时:%-5.2fms 中位耗时:%-5.2fms \n", message, len(data), utils.FormatByesSize(reqsize), 100*(float32(reqsize)/float32(totalrequestSize)), utils.FormatByesSize(respsize), 100*(float32(respsize)/float32(totalreceiveSize)), min, max, avg, median))
|
||||
}
|
||||
file.WriteString("---消息压测接收回包消息统计----------------------------------------------------------------------------------------------------\n")
|
||||
for k, v := range receive {
|
||||
file.WriteString(fmt.Sprintf("消息名:%-20s 请求次数:%-5d 请求总大小:%s\n", k, v, utils.FormatByesSize(receiveSize[k])))
|
||||
if _, ok = messagestime[k]; !ok {
|
||||
file.WriteString(fmt.Sprintf("消息名:%-30s 推送次数:%-5d 数据大小:%-5s --%-2.2f%% \n", k, v, utils.FormatByesSize(receiveSize[k]), 100*(float32(receiveSize[k])/float32(totalreceiveSize))))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -28,6 +28,7 @@ type msghandle struct {
|
||||
|
||||
// 组件参数
|
||||
type CompOptions struct {
|
||||
MaxTime int32
|
||||
}
|
||||
|
||||
func (this *CompOptions) LoadConfig(settings map[string]interface{}) (err error) {
|
||||
@ -155,7 +156,7 @@ func (this *SCompGateRoute) ReceiveMsg(ctx context.Context, args *pb.AgentMessag
|
||||
reply.Reply = session.Polls()
|
||||
// log.Debugf("[Handle Api] t:%v m:%s uid:%s req:%v reply:%v", time.Since(stime), method, args.UserId, msg, reply)
|
||||
nt := time.Since(stime).Milliseconds()
|
||||
if nt < 100 {
|
||||
if this.options.MaxTime == 0 || nt < int64(this.options.MaxTime) {
|
||||
log.Debug("[Handle Api]",
|
||||
log.Field{Key: "t", Value: time.Since(stime).Milliseconds()},
|
||||
log.Field{Key: "m", Value: method},
|
||||
|
Loading…
Reference in New Issue
Block a user