python 編寫遊戲測試機器人客戶端 (三)
遊戲測試機器人搭建 - 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裡,看圖
- 傳的引數跟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)裡有沒對應的協議,有的話就把該協議例項化,協議模組的協議類定義看下圖
- 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編寫遊戲測試機器人客戶端(四)玩家登入
相關文章
- python 編寫遊戲測試機器人客戶端 (一)Python遊戲機器人客戶端
- python 編寫遊戲測試機器人客戶端 (二)Python遊戲機器人客戶端
- 測試平臺系列(90) 編寫oss客戶端客戶端
- NAP客戶端計算機隔離測試之三客戶端計算機
- 無線iphone客戶端測試白皮書(三)iPhone客戶端
- grpc套路客戶端編寫RPC客戶端
- JavaScript客戶端測試之旅JavaScript客戶端
- Swift編寫自己的API客戶端SwiftAPI客戶端
- PC客戶端安全測試服務客戶端
- 客戶端釋出日誌測試客戶端
- 無線1x客戶端編寫概要客戶端
- 使用測試客戶端「玩轉」MQTT 5.0客戶端MQQT
- [測試平臺] 全流程客戶端測試質量保障客戶端
- 編寫Enterprise bean的客戶端(下) (轉)Bean客戶端
- 用VB編寫OPC客戶端訪問WINCC (轉)客戶端
- 使用python/casperjs編寫終極爬蟲-客戶端App的抓取PythonJS爬蟲客戶端APP
- 無線iphone客戶端測試白皮書(二)iPhone客戶端
- 編寫 Netty / RPC 客戶端【框架程式碼分析】NettyRPC客戶端框架
- 手把手教你編寫入門級redis客戶端Redis客戶端
- 通過命令列在Python中測試以太坊RPC客戶端命令列PythonRPC客戶端
- 通過命令列在 Python 中測試以太坊 RPC 客戶端命令列PythonRPC客戶端
- 透過命令列在 Python 中測試以太坊 RPC 客戶端命令列PythonRPC客戶端
- 客戶端效能測試利器PerfDog嚐鮮體驗客戶端
- 測試平臺系列(80) 封裝Redis客戶端封裝Redis客戶端
- 如何進行 iPhone 客戶端的軟體測試iPhone客戶端
- Thrift安裝與伺服器、客戶端的編寫執行演示(windows版本)伺服器客戶端Windows
- 客戶端Ping伺服器工具[Python]客戶端伺服器Python
- 如何編寫一個前端框架之七-客戶端路由(譯)前端框架客戶端路由
- Zookeeper C客戶端庫編譯客戶端編譯
- Python socket的客戶端Python客戶端
- python遊戲開發實戰:網路遊戲Demo(客戶端)Python遊戲開發客戶端
- win/mac 端有哪些客戶端自動化測試的想法呢Mac客戶端
- 關於如何編寫好金融科技客戶端SDK的思考客戶端
- python寫的部署windows下zabbix客戶端指令碼薦PythonWindows客戶端指令碼
- 客戶端安裝虛擬機器問題解答?客戶端虛擬機
- JS獲取客戶端IP地址與機器名JS客戶端
- 關於客戶端 APP 的專項測試怎麼做客戶端APP
- C#版Nebula客戶端編譯C#客戶端編譯