跳到主要内容

game_server.test_robot

简介

服务器端基于engine层实现的测试机器人管理模块 主要是对接pkg.test_client的压测机器人的流程,提供一个标准的对接实现

更新

测试机器人的control_id来源现在有两类,一类是常规机器人(游戏服务器控制创建/销毁),这类的control_id是从(1<<31)开始

另一类是压测平台机器人(http协议,压测平台控制创建/销毁),这类的control_id是从0开始

组件接口

test_robot.gs

函数原型函数作用
void setup(object game_server = nil, function init_robot_user_func = nil, function destroy_robot_user_func = nil)初始化本模块
void init_robot_user(int control_id, string test_name, object user_ob)机器人玩家执行初始化函数
void destroy_robot_user(int control_id, object user_ob)销毁机器人玩家
void send_to(int control_id, string msg, ...)向某个测试客户端发送消息
void broadcast(string msg, ...)向所有测试客户端发送消息
map get_test_clients()返回所有测试客户端
bool is_regular_control_id(int control_id)判断是否为常规的测试客户端id
object find_test_client(int control_id)根据测试客户端id找到对应的处理对象
mixed get_control_id(object conn)根据给定的测试客户端处理对象找到测试客户端id
int login_test_client(object conn)测试客户端登录处理
void logout_test_client(int control_id)测试客户端登出处理
void create_robots_in(int control_id, string test_name, int count, ...)在某个测试客户端上执行创建机器人
void create_robots_in_all(string test_name, int count, ...)在所有测试客户端上执行创建机器人
void destroy_robots_in(int control_id, string test_name, int count, ...)在某个测试客户端上执行销毁机器人
void destroy_robots_in_all(string test_name, int count, ...)在所有测试客户端上执行移除机器人
void iterate_robots_in(int control_id, function func)遍历指定测试客户端上创建的所有机器人玩家
void iterate_robots_in_all(function func)遍历所有测试客户端上的所有机器人玩家
void add_robot_user(int control_id, string test_name, string user_rid)增加一个机器人玩家
void remove_robot_user(int control_id, string user_rid)移除一个机器人玩家

样例

public void test()
{
// 模拟游戏服务器
cfg.init_by_map({
"server_id" : 1
});
engine.boot();
LogD.disable_mongodb();

// 注册网络事件
net.on_server_start("game", (string name) {
test_robot.setup(net.get_server("game"), (: smart_prepare :), (: smart_destroy :));
});

// 启动网络服务
net.start_server("game", 18765, false);

test_equal(GmD.query_entry("robot_op") != nil, true);
}

// 一些初始化操作
public parallel void smart_prepare(object user, string test_name)
{
// 设置本玩家对象为机器人
user.set("is_robot", true);
}

// 删除玩家对象
public parallel void smart_destroy(object user_ob)
{
// 标记为析构中,不再处理指令
user_ob.set_temp("is_destroying", true);

// 先断开网络
user_ob.disconnect();

// 其它处理
//

// 干掉自己
user_ob.drop("test_robot");
UserD.remove_user(user_ob);
}