game_server.engine
简介
游戏服务端引擎的入口文件
组件接口
auth.gs
客户端命令处理器: 登录验证
| 函数原型 | 函数作用 |
|---|---|
| mixed main(object conn, string account, string pass_md5, map args = ) | 命令处理的主函数 |
debug_login.gs
客户端命令处理器: 调试时快速登录
| 函数原型 | 函数作用 |
|---|---|
| array main(object conn, string account) | 命令处理的主函数 |
exit_login_queue.gs
客户端命令处理器: 退出登录排队队列
| 函数原型 | 函数作用 |
|---|---|
| void main(object conn) | 命令处理的主函数 |
gm.gs
客户端命令处理器: 执行GM功能
| 函数原型 | 函数作用 |
|---|---|
| mixed main(object user, string gm_cmd, ...) | 命令处理器的主函数 |
list_users.gs
客户端命令处理器:列出账号下的所有角色列表
| 函数原型 | 函数作用 |
|---|---|
| array main(object conn, map ld) | 命令处理的主函数 |
login.gs
客户端命令处理器: 登录
| 函数原型 | 函数作用 |
|---|---|
| array main(object conn, map ld) | 命令处理的主函数 |
post_login.gs
客户端命令处理器: 客户端登录处理就绪后处理
- 触发post_user_login_ok事件
| 函数原型 | 函数作用 |
|---|---|
| void main(object user) | 命令处理的主函数 |
query_server_info.gs
客户端命令处理器:查询服务器信息
| 函数原型 | 函数作用 |
|---|---|
| map main(object ob) | 命令处理的主函数 |
request.gs
客户端命令处理器: 同步请求,执行后反馈给客户端执行结果
| 函数原型 | 函数作用 |
|---|---|
| void main(object conn_or_user, int cookie, string cmd, mixed args) | 命令处理的主函数 |
run_command.gs
客户端命令处理器: 汇报客户端远程指令执行结果
- 配合TelnetD模块功能
| 函数原型 | 函数作用 |
|---|---|
| void main(object user, string type, string ret) | 命令处理的主函数 |
FAttrib.gs
实体属性组件1.0版本,基于pkg.attrib_calc实现
- 目前推荐使用FEntityAttrib组件
| 函数原型 | 函数作用 |
|---|---|
| void FAttribCalc.send_attribs() | 同步消息:属性完整更新 |
| void FAttribCalc.send_attribs_changed(array change_list) | 同步消息:属性变更更新 |
FClientConnectionHolder.gs
持有客户端网络连接对象的组件
| 函数原型 | 函数作用 |
|---|---|
| object get_connection() | 获取当前持有的客户端连接对象 |
| bool bind_connection(object conn) | 关联或者绑定客户端网络连接对象 |
| bool prev_bind_connection(object conn) | 虚函数: 关联或者绑定时的前处理 |
| object unbind_connection() | 解除关联或者绑定的客户端连接对象 |
| void post_unbind_connection(object prev_conn) | 虚函数: 解除关联或者绑定时的后处理 |
| void notify_bind(object conn) | 通知处理: 执行关联或者绑定客户端连接对象 |
| void notify_unbind(object conn) | 通知处理: 执行解除关联或者绑定客户端连接对象 |
| mixed process_request(object conn_or_user, string cmd, array args) | 处理客户端请求 |
FComm.gs
基础通讯组件,提供发送消息和广播消息的接口
| 函数原型 | 函数作用 |
|---|---|
| void set_comm(bool is_comm) | 虚函数: 设置通讯状态 |
| bool is_comm() | 虚函数: 获取通讯状态 |
| void switch_comm(bool new_value) | 切换通讯状态到指定值(切换前的状态将被保存) |
| void recover_comm() | 恢复原来的通讯状态(switch_comm时保存的状态将被恢复) |
| void send(string msg, ...) | 发送消息(消息名称和变参形式的消息参数) |
| void send_arr(string msg, array msg_args) | 发送消息(消息名称和数组形式的消息参数列表) |
| void broadcast(string msg, ...) | 广播消息(消息名称和变参形式的消息参数) |
| void send_raw(mixed payload) | 虚函数:发送消息(已经组织好的消息数据) |
| void broadcast_raw(mixed payload) | 虚函数:广播消息(已经组织好的消息数据) |
FComponentBase.gs
动态组件对象的基础组件,和FComponents对应
- 实现一个可被FComponents组件添加的动态组件对象时,动态组件对象应该包含本组件
- 一般情况下,只有在需要动态添加组件时才推荐使用动态组件对象
- 动态组建对象只能通过new_component/load_component创建
| 函数原型 | 函数作用 |
|---|---|
| void set_component_owner(object parent) | 设置本动态组件对象的所有者 |
| object get_component_owner() | 获取本动态组件对象的所有者 |
| object gco() | get_component_owner接口的简短版本 |
| void notify_field_update(string field_name, string d, mixed key, mixed val) | 通知:本动态组件对象的字段值更新了 |
| void notify_all_look_fields_update(string field_name, string d, mixed key, mixed val) | obsoleted |
| void notify_appearance_update(string field_name, string d, mixed key, mixed val) | 通知:本动态组件对象的外观字段值更新了 |
FComponents.gs
动态组件对象的管理组件
- 需要挂载动态组件对象的对象都应该包含本组件
| 函数原型 | 函数作用 |
|---|---|
| void dump_components() | 调试接口: 输出所有动态组件信息 |
| void add_dyn_component(object comp) | 虚函数: 添加一个动态组件对象 |
| void remove_dyn_component(object comp) | 虚函数:移除一个动态组件对象 |
| void remove_all_dyn_components() | 移除所有动态组件对象 |
| 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() | 获取所有动态组件对象的常驻数据 |
| void iterate_components(function func) | 遍历所有动态组件对象 |
FCookieProvider.gs
对象范围内的cookie生成器,保证对象范围内相同id的cookie唯一且不重复
- 和FCookiePrivider配合使用时,可以发布订阅机制下的内容发布者
| 函数原型 | 函数作用 |
|---|---|
| void init_cookies(array cookie_list) | 初始化一组指定名称id的cookie列表 |
| void init_cookie(mixed cookie_id) | 初始化一个指定名称id的cookie |
| void destroy_cookie(mixed cookie_id) | 销毁一个指定名称id的cookie |
| bool contains_cookie(mixed cookie_id) | 检查是否包含指定名称id的cookie |
| int get_cookie(mixed cookie_id) | 获取指定名称id的cookie值 |
| void update_cookie(mixed cookie_id) | 更新指定名称id的cookie值(cookie值递增+1) |
| bool is_cookie_matched(mixed cookie_id, int cookie_value) | 检查指定名称id的cookie值是否和目标值匹配 |
FCookieSubscriber.gs
cookie同步机制中的订阅者
- 这是一个低频的单向同步机制: 主动获取目标对象的同步内容
- update_subscribe_cookies()函数负责拖取所有目标对象的同步内容
- 目标对象是内容的发布方,需要包含FCookieProvider组件
- 包含本组件的对象是内容的订阅方
- 需要在心跳中主动执行update_subscribe_cookies方法主动获取订阅目标发布的cookie内容
| 函数原型 | 函数作用 |
|---|---|
| void subscribe_cookie(mixed cookie_id, object target_ob, function func, function unsubscribe_callback = nil) | 订阅目标发布的指定名称id的cookie |
| void unsubscribe_cookie(mixed cookie_id) | 取消订阅指定名称id的cookie |
| void update_subscribe_cookies() | 执行一次心跳(主动获取订阅目标发布的cookie内容) |
FCoPoolSerial0.gs
基于hash值的有序执行的协程池
- 相同hash值的操作将分配到同一个操作队列中以便保证顺序执行
| 函数原型 | 函数作用 |
|---|---|
| int co_pool_size() | 获取当前的协程池大小 |
| void dispatch_service_serial(int hash, function func) | 分发操作(相同哈希值的操作将分配到同一个操作队列中以便保证顺序执行) |
FEntity.gs
游戏里实体对象的基础组件
- 实体对象需要通过实体对象工厂(Entity Factory)创建
- 所有实体对象都应该直接或者间接包含本组件
FEntityAppearance.gs
实体对象的外观组件
| 函数原型 | 函数作用 |
|---|---|
| void notify_appearance_update(string field_name, string d, mixed key, mixed val, mixed op) | 虚函数: 实体对象外观字段发生改变时的通知函数 |
| void notify_component_appearance_update(string comp, string field_name, string d, mixed key, mixed val) | 虚函数: 实体对象的动态组件的外观字段发生改变时的通知函数 |
| map query_appearance_data() | 获取实体对象的外观数据(权限类型为"appearance"的常驻数据) |
FEntityAttrib.gs
实体对象的属性组件
- 本组件是基于pkg.attrib_calc2实现的,目的是取代废弃的FAttrib组件
| 函数原型 | 函数作用 |
|---|---|
| string FAttribCalc.get_attrib_calculator_id() | 虚函数: 获取实体对象的属性计算器id |
| void FAttribCalc.send_attribs(map prev_attrib_dict) | 虚函数: 同步实体对象的属性值词典 |
| void FAttribCalc.post_refresh_attribs(map prev_attrib_dict) | 虚函数: 更新属性值词典时的后处理 |
FEntityContainer.gs
实体对象的容器功能组件
- 支持通过rid获取子对象
| 函数原型 | 函数作用 |
|---|---|
| object get_child_by_rid(string rid, bool recursive = true) | 通过rid获取子对象 |
| map get_children_dict() | 获取所有子对象词典 |
FEntityPrevClose.gs
实体对象支持销毁(close)前处理机制的组件
- 期望实体对象close时触发函数执行同时又不期望函数在析构函数中执行时,可以通过该组件实现
| 函数原型 | 函数作用 |
|---|---|
| void set_prev_close_func(function func) | 设置实体对象析构前的回调处理函数(在prev_close前执行) |
| void prev_close() | 虚函数:实体对象析构前的处理函数 |
FEntityProfile.gs
基于心跳机制实现的资料同步组件(发布订阅模式)
- 做为发布者
- 通过add_publish_profile_type()添加发布的资料类型
- 做为订阅者
- 通过subscribe_profile方法订阅资料
- 重要!!!
-
- 包含本组件的对象需要在心跳函数中执行publish_all_profiles()发布所有资料
-
- 包含本组件的对象需要在心跳函数中执行update_subscribe_cookies()更新订阅的资料
-
- 订阅者通过get_subscribe_profile()获取订阅资料
FEntityRelativeQuery.gs
实体对象支持通过关联查询获取字段值的组件
- 主要实现就是覆盖了FEntity.query接口。
- 另外,关联查询功能是在特定项目的需求的基础上实现的
| 函数原型 | 函数作用 |
|---|---|
| mixed FEntity.query(string key) | 虚函数:查询实体对象指定的字段值 |
FEventEmitter.gs
事件触发器组件
- 仿照python的libs.pyee实现的
| 函数原型 | 函数作用 |
|---|---|
| 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() | 调试接口:获取所有事件信息 |
FFields.gs
字段组件
- 不同类型的对象有不同字段
- 不同字段有不同的权限
- 支持不同权限字段的更新和收集
- 配合Entity使用,必须有class_id
- 字段操作四元组说明:
-
- 当d为nil时,key是常驻数据dbase的一个键
-
- 当d为常驻数据dbase的一个键时(对应的值必须是词典类型),key是词典类型值的一个子健
-
- 当d为常驻数据dbase的一个键时(对应的值必须是列表类型),key是列表类型值的一个有 效索引
-
- 当value为nil时,表示删除对应数据
-
- 当op等于list_set时,表示更新列表对应位置的值
| 函数原型 | 函数作用 |
|---|---|
| string get_field_type() | 虚函数: 指定获取用于初始化本对象字段类型的接口 |
| string get_ob_field_type() | 获取本对象字段类型的接口 |
| map collect_fields(string privilege = nil) | 收集指定权限的字段数据词典 |
| void send_field_change(string key) | 同步字段变更 |
| void FDbase.set(string key, mixed val) | 设置字段值 |
| void FDbase.delete(string key) | 删除字段 |
| void FDbase.dict_set(string d, mixed key, mixed val) | 设置词典字段的子键值 |
| void FDbase.dict_delete(string d, mixed key) | 删除词典字段的子键 |
| void FDbase.list_set(string d, int pos, mixed val) | 设置数组字段指定位置的值 |
| void FDbase.list_insert(string d, int pos, mixed val) |