游戏测试 python 编写游戏测试机器人客户端 (三)

A_Jian · 2020年12月08日 · 2532 次阅读

游戏测试机器人搭建 - Recv Actor

Recv Actor

Recv Actor 初始化

class RecvActor(pykka.ThreadingActor):
    def __init__(self, player=None, sock=None):
        super(RecvActor, self).__init__()
        self.player = player
        self.socket = sock
  • 参数传递及调用,在 PlayerActor 里,看图 recv_args
  • 传的参数跟 Send Actor 一样

启动 Recv Actor

def on_start(self):
    self.on_loop()
  • 跟 Send Actor 一样,要先调用这里,在这里启动了循环接收方法,持续接收服务端返回的数据

持续接收服务端数据

def on_receive(self, msg):
    self.on_loop()
    # sleep一下不然耗性能
    time.sleep(0.01)

接收服务端数据进行反序列化

def on_loop(self):
    data = self.socket.recv()
    data = list(ijson.items(data,''))[0]
    proto_id,proto_bin = data['cmd'],data
    proto_module = protoFile
    proto_cls = getattr(proto_module, str(proto_id).capitalize())
    proto_cls_ins = proto_cls()
    if hasattr(proto_cls_ins, 'response'):
        getattr(proto_cls_ins,'response')(proto_bin)
        self.player.send_msg(MSG_PROTO, (proto_id, proto_cls_ins))
    else:
        self.player.send_msg(MSG_PROTO, (proto_id, proto_cls_ins))
    self.actor_ref.tell({'msg': 'loop'})

  • socket.recv : 接收服务端的数据
  • list(ijson.items(data,''))[0] : 服务端返回的数据是 json,所以我用 ijson 来取值,之前的项目返回的是字节流/二进制流,我是根据协议文档生成对应的 Python 协议解析类来反序列化
  • 从 data 取到协议 ID(proto_id) 和协议内容 (proto_bin)
  • 检测 (hasattr) 协议模块 (proto_module) 里有没对应的协议,有的话就把该协议实例化,协议模块的协议类定义看下图proto_show
  • to_json : 把 dict 里的 value 取出来
  • 把反序列化后的协议 ID 和协议发送给 Player Actor 用来做交互处理 (主要是拓展功能用的,proto 模块,后续再写)
  • 最后给自己发送一条消息,相当 while 1,一直循环下去

停止 RecvActor

def on_stop(self):
    print('RecvActor stop')
  • pykka actor 自带的方法,集中在 PlayerActor 的 on_stop 里调用

双是 log 收集

@GetLog(level='error')
def on_failure(self, exception_type, exception_value, traceback):
    logging.error(f'RecvActor fail -> {exception_type, exception_value, tb.print_tb(traceback)}')
  • log 模块的使用可以参考"官方说明"或者自行百度查询,案例很多

到这里 3 个核心的 Actor 都搭建完毕了,接下来演示下python 编写游戏测试机器人客户端 (四) 玩家登录

最后的最后,各位的关注、点赞、收藏、碎银子打赏是对我最大的支持,谢谢大家!
需要源码的小伙伴关注微信公众号 ID:gameTesterGz
或扫描二维码回复机器人脚本即可

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 0 条回复 时间 点赞
A_Jian python 编写游戏测试机器人客户端 (二) 中提及了此贴 12月08日 21:51
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册