test_client
简介
测试客户端的启动文件
组件接口
common.gs
公共模块的启动/关闭流程处理
| 函数原型 | 函数作用 |
|---|---|
| void boot() | 启动 |
| void shutdown() | 关闭 |
FChildInstanceNode.gs
测试实例对象的子节点组件
| 函数原型 | 函数作用 |
|---|---|
| object instance() | 获取测试实例对象 |
| void output(...) | 向控制台输出信息 |
FClientComm.gs
游戏服务器的连接组件
| 函数原型 | 函数作用 |
|---|---|
| void debug_on() | 调试接口: 开启调试 |
| void debug_off() | 调试接口: 关闭调试 |
| string desc() | 获取描述信息 |
| void set_ip(string ip) | 设置游戏服务器IP |
| string get_ip() | 获取游戏服务器IP |
| void set_port(int port) | 设置游戏服务器端口 |
| int get_port() | 获取游戏服务器端口 |
| void set_using_websocket(bool using_websocket) | 设置连接是否使用websocket协议 |
| bool is_using_websocket() | 获取连接是否使用websocket协议 |
| bool is_connected() | 判断连接是否已建立 |
| bool connect(string ip, int port) | 连接游戏服务器 |
| object get_connection() | 获取连接对象 |
| bool reconnect() | 重连游戏服务器 |
| void disconnect() | 断开连接 |
| bool send(string cmd, ...) | 向游戏服务器发送命令 |
| bool on_send(string cmd, ...) | 执行发送命令 |
| mixed send_request(string cmd, ...) | 向游戏服务器发送命令并等待处理结果 |
| void set_message_callback(string msg, function func) | 设置游戏服务器消息的处理函数 |
| void invoke_message_callback(string msg, array args) | 执行游戏服务器消息处理函数 |
| void on_message(string msg, array args) | 收到游戏服务器消息时处理 |
| void on_connect() | 连接建立时处理 |
| void on_disconnect() | 连接断开时处理 |
FCloseGuard.gs
对象close守卫组件
守卫的目的是一些对象不期望外部通过close方法直接析构,而是使用drop方法
| 函数原型 | 函数作用 |
|---|---|
| void destroy() | 销毁本对象 |
| void drop() | 丢弃本对象 |
FComponentBase.gs
动态组件对象的基础组件
| 函数原型 | 函数作用 |
|---|---|
| string get_component_name() | 获取组件名称 |
| void set_component_owner(object parent) | 设置所有者 |
| object get_component_owner() | 获取所有者 |
| object gco() | 获取所有者(get_component_owner的简短版) |
FComponents.gs
对象形式的动态组件管理器
| 函数原型 | 函数作用 |
|---|---|
| void dump_components() | 调试接口: 输出所有动态组件 |
| void add_dyn_component(object comp) | 添加一个动态组件对象 |
| void remove_dyn_component(object comp) | 移除一个动态组件对象 |
| object get_dyn_component(string name) | 通过名称查找动态组件对象 |
| object comp(string name) | 通过名称查找动态组件对象(get_dyn_component的简短版) |
| array get_dyn_components() | 获取所有动态组件对象列表 |
| map get_dyn_components_dict() | 获取所有动态组件对象字典 |
| void do_components_heartbeat() | 执行所有动态组件的心跳 |
| void notify_event(string evt, array args) | 向所有动态组件对象通知事件 |
| map query_components_dbase() | 获取所有动态组件的数据字典 |
FEntity.gs
实体对象的基础组件,和游戏服务器engine的FEntity对应
| 函数原型 | 函数作用 |
|---|---|
| string get_rid() | 获取rid |
| string get_name() | 获取名称 |
| int get_class_id() | 获取class_id |
| string get_type() | 获取实体类别 |
| object game_client() | 获取本实体对象所属的游戏服务器连接对象 |
| object instance() | 获取本实体对象所属的测试实例对象 |
| void output(...) | 向控制台输出信息 |
| string desc() | 获取描述信息 |
| mixed FDbase.query(string key) | 查询字段值 |
| void refer_by(string reason) | 标记实体对象被引用 |
| void unrefer_by(string reason) | 标记实体对象被取消引用 |
| bool is_referred_by(string reason) | 判断是否被指定类型引用 |
| bool is_referred() | 判断是否被引用 |
| void FCloseGuard.drop() | 丢弃所有子对象以及自身 |
FEventEmitter.gs
事件触发器组件
| 函数原型 | 函数作用 |
|---|---|
| void on(string event, function fn) | 注册指定名称的事件的响应函数(展开参数) |
| void on_raw(string event, function fn) | 注册指定名称的事件的响应函数(不展开参数) |
| void once(string event, function fn) | 注册指定名称的事件的响应函数(展开参数),触发一次后自动移除 |
| void remove_event(string event) | 移除指定名称的事件的所有响应函数 |
| void emit(string event, ...) | 触发指定名称的事件 |
| void emit_local(string event, ...) | 触发指定名称的事件(确定不跨域) |
| void remove_listener(string event, function fn) | 移除指定名称的事件的特定响应函数 |
| void remove_listener_by_object(string event, object func_ob) | 移除指定名称的事件的特定所有者的所有响应函数 |
| void remove_listeners_by_object(object func_ob) | 移除特定所有者的所有响应函数 |
| map debug_get_events() | 调试接口 - 获取所有事件词典 |
FFieldListener.gs
实体对象的字段监听组件
| 函数原型 | 函数作用 |
|---|---|
| void listen_any_field_changed(mixed listener, function func) | 监听者向本对象注册任意字段变更的处理函数 |
| void unlisten_any_field_changed(mixed listener) | 监听者向本对象注销任意字段变更的处理函数 |
| void listen_field_changed(mixed key, mixed listener, function func, bool run_when_listen = false) | 监听者向本对象注册指定字段变更的处理函数 |
| void unlisten_field_changed(mixed listener, bool not_show_err = false) | 监听者向本对象注销所有对象字段变更的处理函数 |
| void notice_field_changed(string key, mixed sub_key, mixed old_val, mixed val) | 本对象通知所有监听者字段发生变更 |
FFields.gs
实体对象的字段组件,和游戏服务器engine的FFields对应
FGameClientBase.gs
游戏客户端连接对象的基础组件
| 函数原型 | 函数作用 |
|---|---|
| string FClientComm.desc() | 获取描述信息 |
| bool fetch_server_info() | 获取游戏服务器信息 |
| string get_server_id() | 获取游戏服务器ID |
| string get_server_name() | 获取游戏服务器名称 |
| map get_server_info() | 获取游戏服务器信息 |
| bool is_using_proxy() | 是否通过代理服务器连接 |
| void set_proxy_client_ob(object proxy_client_ob) | 设置代理服务器连接对象 |
FHeartbeat.gs
为对象提供心跳功能的组件
| 函数原型 | 函数作用 |
|---|---|
| void start_heartbeat(int ms) | 开启心跳 |
| void stop_heartbeat() | 停止心跳 |
| void heartbeat() | 心跳处理函数 |
FInRoom.gs
实体对象的房间组件,和游戏服务器engine的FInRoom组件对应
包含本组件的对象支持设置房间和坐标等操作
| 函数原型 | 函数作用 |
|---|---|
| object get_room() | 获取本实体对象所在的房间对象 |
| void on_enter_room(object room_ob, POS pos) | 进入房间时的处理 |
| void on_leave_room(object room_ob) | 离开房间时的处理 |
| void set_position(POS pos) | 设置位置 |
| POS get_position() | 获取位置 |
FInstance.gs
测试实例对象的基础组件
| 函数原型 | 函数作用 |
|---|---|
| bool startup() | 初始化 |
| bool run_test(string test) | 执行指定名称的测试案例 |
| bool try_close_manually() | 接管对象的close操作 |
| void post_create() | 对象创建后的处理 |
| void prev_close() | 对象close前的处理 |
| void FHeartbeat.heartbeat() | 心跳处理 |
FInstanceAuthClient.gs
测试实例对象的认证服务器连接组件
| 函数原型 | 函数作用 |
|---|---|
| object create_auth_client(map para = ) | 创建并绑定一个认证服务器连接对象 |
| object get_auth_client() | 获取本对象绑定的认证服务器连接对象 |
FInstanceBase.gs
测试实例对象的基础组件
| 函数原型 | 函数作用 |
|---|---|
| void set_no(int n) | 设置测试实例对象的数字编号 |
| int get_no() | 获取测试实例对象的数字编号 |
| string desc() | 获取描述信息 |
| mixed get_config(string path) | 获取配置值 |
| void output(...) | 向控制台输出信息 |
FInstanceGameClient.gs
测试实例对象的游戏服务器连接组件
| 函数原型 | 函数作用 |
|---|---|
| object create_client(map para = ) | 创建并绑定一个游戏服务器连接对象 |
| object get_client() | 获取游戏服务器连接对象 |
| mixed cmd(string cmd, ...) | 如果本地存在指令处理对象(CommandD.query_entry可获取)则直接执行 |
| mixed gm(string cmd, ...) | 如果本地存在指令处理对象(GmD.query_entry可获取)则直接执行 |
FInstanceProxyClient.gs
测试实例对象的代理服务器连接组件
| 函数原型 | 函数作用 |
|---|---|
| object create_proxy_client(map para = ) | 创建并绑定一个代理服务器连接对象实例 |
| object get_proxy_client() | 获取本对象绑定的代理服务器连接处理对象 |
FInstanceServerSelector.gs
测试实例对象的服务器选择器组件
| 函数原型 | 函数作用 |
|---|---|
| object create_server_selector(map para = ) | 创建并绑定服务器选择器的处理对象 |
| object get_server_selector() | 获取本对象绑 定的服务器选择器的对象实例 |
FInstanceTester.gs
测试实例对象创建测试案例对象实例的组件
| 函数原型 | 函数作用 |
|---|---|
| object create_test(string name) | 创建并绑定指定名称的测试案例对象 |
| object get_test() | 获取本对象绑定的测试案例对象实例 |
FMachineFactory.gs
状态机组件
| 函数原型 | 函数作用 |
|---|---|
| Machine create_machine(string name, array state_list = nil, map transition_dict = nil, string initial_state = nil) | 创建一个状态机实例 |
| Machine get_machine(string name) | 通过状态机名称查找获取状态机实例 |
| void destroy_machine(string name) | 通过状态机名称销毁一个状态机实例 |
FNode.gs
节点组件
FTestBase.gs
测试案例基础组件
使用者实现的测试案例对象需要包含本组件
| 函数原型 | 函数作用 |
|---|---|
| void on_game_message(string msg, function func) | 注册游戏服务器消息的处理函数 |
| void on_any_game_message(function func) | 注册所有游戏服务器消息的处理函数 |
| string desc() | 获取描述信息 |
| mixed get_config(string path) | 获取本案例对象绑定的测试实例对象的配置值 |
| string raw_name() | 获取本案例的名称 |
| void wait_util_true(function fn = nil, int wait_time = 1) | 等待直至条件函数返回true |
| void stop() | 停止执行(析构本案例绑定的测试实例对象) |
| void record_request_api(string method, string name, int response_time, mixed exception = nil, int content_length = 0) | 记录请求api的统计信息 |
ClientControlD.gs
受游戏服务器控制的压力测试客户端功能模块
本模块持有的客户端连接会得到一个游戏服务器分发的ID(control id),这个id在游戏服务器上是唯一的
在配置文件中配置了[as_client_control]值,本模块将在进程启动后激活功能
和mods.stress_node的区别在于:stress_node是受雷霆平台控制的压力测试客户端功能模块
| 函数原型 | 函数作用 |
|---|---|
| int get_control_id() | 获取受控客户端ID |
| string get_version() | 获取游戏版本号 |
| void set_version(string version) | 记录游戏版本号 |
| string gen_account() | 生成一个游戏账号的前缀(游戏服务器上唯一) |
| void dump() | 调试接口: 输出当前已创建的测试实例对象 |
DelayD.gs
提供延迟执行功能的模块
延迟执行的时长分为高精度和低精度两类,延迟时长>=15秒时使用低精度延迟执行,否则使用高精度延迟执行
| 函数原型 | 函数作用 |
|---|---|
| void delay_invoke(float seconds, function func) | 延迟执行 |
| void delay_invoke_high(float seconds, function func) | 高精度延迟执行 |
| void delay_invoke_low(float seconds, function func) | 低精度延迟执行 |
DynObjectsD.gs
动态对象管理模块
支持通过文本名称创建动态对象实例 DynObjectsD.create_object("baggage")
支持使用者扩展动态对象
| 函数原型 | 函数作用 |
|---|---|
| void set_factory_callback(string name, function callback) | 设置动态对象创建回调函数 |
| object create_object(string name, domain d = nil, mixed para = nil) | 创建动态对象 |
GmD.gs
GM调试接口模块
主要是提供一些调试接口,可以在控制台上直接调用
| 函数原型 | 函数作用 |
|---|---|
| void trace_on() | 调试接口: 打开内置的调试输出 |
| void trace_off() | 调试接口: 关闭内置的调试输出 |
| void dump() | 调试接口: 输出所有GM指令 |
| void focus_output_on() | 调试接口: 焦点实例打开输出 |
| void focus_output_off() | 调试接口: 焦点实例关闭输出 |
| void output_on() | 调试接口: 允许输出 |
| void output_off() | 调试接口: 不允许输出 |
| void gm(string cmd, ...) | 调试接口: 焦点实例发送gm指令 |
InstancesD.gs
测试实例对象管理模块
提供测试实例对象的创建接口
提供将指定测试实例对象设置为焦点或者移除焦点等辅助调试输出的功能
支持使用者扩展测试实例
| 函数原型 | 函数作用 |
|---|---|
| int allocate_no() | 获取一个测试实例编号(进程内唯一) |
| object create_instance(string instance_name, domain d, map para) | 创建一个测试实例对象 |
| void set_no_output(bool no_output = true) | 设置所有测试实例对象禁止输出 |
| void set_focus_output_only(bool focus_output_only = true) | 设置仅焦点客户端允许输出 |
| bool is_outputable(object ob) | 判断一个测试实例对象是否允许输出 |
| void output(object ob, ...) | 测试实例对象执行控制台输出 |
| void add_instance(object ob) | 添加一个测试实例对象到管理列表中 |
| void remove_instance(object ob) | 从管理列表中移除一个测试实例对象 |
| object find_instance(int no) | 根据编号找到对应的测试实例对象 |
| void iterate_instance(function func) | 遍历所有已创建的测试实例对象 |
| void set_focus(int no) | 设置指定编号的测试实例对象为焦点 |
| object get_focus() | 获取当前焦点 |
| void dump() | 调试接口: 按编号顺序输出所有已创建的测试实例对象 |
MsgHandlerD.gs
消息处理器管理对象
使用者可以扩展消息处理器
| 函数原型 | 函数作用 |
|---|---|
| void handle_message(object c, string msg, array args) | 处理消息 |
TestD.gs
测试案例管理功能模块
提供测试案例对象的创建、测试案例的执行等功能
使用者可以扩展测试案例
| 函数原型 | 函数作用 |
|---|---|
| object create_test(string name, map para, domain d) | 创建一个测试案例对象 |
| void start_test(map para) | 开始执行测试案例 |
| object run_test(string name, map args, string instance_name) | 创建测试实例对象并执行测试 |
CClientEntities.gs
名称为entities的动态组件对象,管理客户端持有的entity对象
| 函数原型 | 函数作用 |
|---|---|
| void add_object(object ob) | 添加有rid的对象 |
| void remove_object(object ob) | 移除有rid的对象 |
| object find_object_by_rid(string rid) | 根据rid查找对象 |
| string FComponentBase.get_component_name() | 获取本动态组件对象名称 |
| object create_entity(string rid, int class_id, map dbase) | 创建实体对象(entity) |
| void destroy(string rid) | 销毁实体对象 |
| void add_entity(string rid, map dbase) | 创建实体对象并添加 |
| void remove_entity(string rid) | 移除实体对象 |
| object self() | 获取用户的实体对象(User对象实例) |
| void iterate_entity(function func) | 遍历所有实体对象 |
| array filter_entity(function func) | 获取过滤后的实体对象列表 |
| object find_entity(string rid) | 根据rid查找实体对象(和find_object_by_rid一样) |
| array get_entities(function func = nil) | 获取满足条件的实体对象列表 |
CSocialClient.gs
名称为social的动态组件对象,负责客户端和社交服务器的交互功能
CUserData.gs
名称为data的动态组件对象,负责玩家自身数据的管理
| 函数原型 | 函数作用 |
|---|---|
| string FComponentBase.get_component_name() | 获取本动态组件对象的名称 |
| string get_user_account() | 获取玩家账号 |
| string get_user_rid() | 获取玩家rid |
| string get_user_account_id() | 获取玩家账号id |
| object get_user_ob() | 获取玩家实体对象 |
| mixed query_from_user(string key) | 获取玩家指定字段的值 |
| string get_rid() | 获取玩家rid(同get_user_rid) |
| string get_account() | 获取玩家账号(同get_user_account) |
config.gs
测试客户端全局配置
启动参数指定/D CONFIG值时加载该配置文件,否则加载/config/config.json
| 函数原型 | 函数作用 |
|---|---|
| mixed get(string path) | 获取配置值 |