game_server.game_social
简介
和社交服务器交互的功能模块
本功能模块导入项目的几点说明
-
本模块基于engine层
-
本模块依赖游戏服务器的网络服务和http服务,必须在游戏服务器的网络服务和http服务就位后才能进行加载
-
需要调用本模块的setup方法进行初始化
-
本模块提供一些预置的脚本功能和游戏指令等,也可以通过包含本模块提供的组件进行扩展
其它说明:
-
cmds/refresh_social_token.gs - 刷新游戏客户端用于登录社交服的token
-
cmds/take_mail_gifts.gs - 领取邮件附件奖励的指令
-
http_cmds/auth_social_account.gs - 游戏服务器做为社交服的登录验证代理时提供的http指令(验证游戏服提供的登录社交服的token)
-
scripts/chat_scripts.gs - 预置的几个聊天相关的功能函数的集合
-
scripts/mail_scripts.gs - 预置的几个邮件相关的功能函数的集合
-
可以通过game_social.dump_scripts()输出所有可用的功能脚本(通过game_social.eval调用)
-
可以通过包含FUserSocial组件,开启社交服用户创建、验证等功能
-
可以通过包含FSocialScript组件,自定扩展功能模块的功能(通过game_social.eval方法进行调用)
组件接口
FSocialScript.gs
用于扩展社交服对接模块的功能组件 所有用于增加自定义的本地功能脚本(参考scripts/目录下的功能脚本)应该包含本组件
| 函数原型 | 函数作用 |
|---|---|
| void register_scripts(string prefix, array func_name_list) | 注册一组指定名称的脚本函数 |
| void auto_register_scripts(string prefix) | 自动注册脚本函数(底层限制,不太精准,但是可用) |
| void register_script_func(string script_name, function func) | 注册脚本函数 |
| void unregister_script_func(string script_name) | 注销脚本函数 |
| void unregister_all_script_func() | 注销所有脚本函数 |
FUserSocial.gs
为User对象提供的社交服组件 1.生成一个随机数提供给游戏客户端,做为游戏客户端登录社交服务器的凭证(token) 2.游戏客户端可以通过refresh_social_token指令,向游戏服务器重新请求社交服登录凭证(token)
| 函数原型 | 函数作用 |
|---|---|
| void assure_social_account(map para = ) | 确保社交服账号存在并向游戏客户端发送社交服登录凭证(已经存在则下发登录token,不存在则创建账号后再下发登录token) |
| bool check_social_token(mixed token) | 校验社交服登录token是否和玩家持有的token匹配 |
| bool refresh_social_token() | 刷新社交服登录凭证(token) |
game_social.gs
| 函数原型 | 函数作用 |
|---|---|
| bool setup(mixed para = nil) | 初始化模块 |
| mixed send_request(string cmd, map args) | 向社交服发送指令,并阻塞等待指令结果返回 |
| void send(string cmd, map args) | 向社交服发送指令,不等待指令结果返回 |
| bool contains_script(mixed script_name_list) | 是否包含指定的脚本函数 |
| mixed eval(string script_name, ...) | 执行脚本函数 |
| void register_script_func_dict(map dict) | 登记一组脚本函数(登记后才能通过game_social.eval函数调用) |
| void register_script_func(string script_name, function func) | 登记脚本函数 |
| void unregister_script_func(string script_name) | 移除已登记脚本函数 |
| void unregister_script_funcs(array script_name_list) | 移除一组已登记的脚本函数 |
| void register_scripts_owner(array script_name_list, object owner) | 注册脚本函数的所有者(已存在则覆盖) |
| array unregister_scripts_owner(array script_name_list, object ob) | 移除脚本函数的所有者 |
| object admin() | 获取社交服的客户端连接对象(全局唯一,有管理员权限) |
| void dump_scripts() | 调试接口 - 显示所有已登记脚本函数名称 |
| bool create_account(string account, map info = ) | 创建社交服账号 |
| bool check_account(string account) | 检查指定社交服账号是否存在 |
| bool delete_account(string account, bool mark_deleted = true) | 删除社交服账号 |
chat_scripts.gs
为game_social添加聊天操作的脚本
| 函数原型 | 函数作用 |
|---|---|
| void send_sys_world_chat(string content, map extra_para = nil) | 发送系统的世界聊天信息 |
| void send_channel_chat(map args) | 发送频道聊天信息 |
mail_scripts.gs
为game_social添加邮件操作的脚本
类
Mail
邮件数据结构
成员变量
| 变量名 | 类型 | 初始值 | 须初始化 | 描述 |
|---|---|---|---|---|
| cookie | int | 0 | 可选 | 邮件必须有的字段: cookie,当Mail做为阻塞请求参数时需要 |
| receiver | mixed | nil | 可选 | 邮件收件人 |
| content | string | nil | 可选 | 邮件文本内容 |
| title | string | nil | 可选 | 以下是自定义字段: 邮件标题 |
| attachment | map | nil | 可选 | 附件 |
| category | string | nil | 可选 | 邮件分类 |
| category_data | map | nil | 可选 | 邮件分类特有的数据 |
| channel | string | nil | 可选 | 收件人注册渠道限制(可选) |
| register_time | mixed | nil | 可选 | 收件人注册时间限制(可选) |
| extra_dict | map | nil | 可选 | 其它附加字段词典(可选) |
成员方法
| 函数原型 | 函数作用 |
|---|---|
| void set_title(string title) | 设置邮件标题 |
| void set_content(string content) | 设置邮件内容 |
| void set_receiver(mixed receiver) | 设置邮件收件人 |
| void set_category(string category) | 设置邮件分类 |
| void set_category_data(map category_data) | 设置邮件分类特有的数据 |
| void set_register_time(int register_time) | 设置邮件收件人注册时间限制 |
| void set_channel(string channel) | 设置邮件收件人注册渠道限制 |
| void set_extra_field(string key, mixed value) | 设置邮件附加字段 |
| void set_extra_fields(map dict) | 设置一组邮件附加字段 |
| map get_entire_dict() | 获取邮件的所有字段词典 |
| void add_gifts(mixed gift_data) | 向邮件添加礼物数据 |
样例
// 社交服模块安装
game_social.setup({
"extra_script_path" : __DIR__ "other_scripts/",
"extra_cmd_path" : __DIR__ "other_cmds/",
"extra_http_cmd_path" : __DIR__ "other_http_cmds/",
"httpserver_ob" : httpserver.find_server_by_port(http_server_port)
});