协议公共结构模块
//协议公共结构模块 //如无特别说明,所有时间单位均为秒 syntax = "proto2"; //通用协议------------------------------------------ //通用协议------------------------------------------ // 错误码 enum result_enum { error_code_success = 0; //操作成功 error_code_fail = 90001; //失败,服务器异常 error_code_param_error = 90002; //参数错误,如超出有效范围 error_code_invalid_req = 90003; //非法操作 error_code_db_fail = 90004; //db操作失败 error_code_user_inexistent = 90005; //用户不存在 error_code_object_inexistent = 90006; //操作对象不存在 error_code_no_permission = 90007; //无操作权限 error_code_need_login_first = 90008; //用户没有登录 error_code_need_auth_app_first = 90009; //用户没有认证app error_code_limit = 90010; //(资源使用)满额 error_code_object_already_exists = 90011; //操作对象已存在 //...增加错误码 } message result_struct { optional result_enum _err_no = 1; // 错误码 optional string _err_desc = 2; // 失败时的错误原因描述 } //游戏玩家显示的信息:ID,昵称,微信头像 message user_base_info_struct { optional int64 _uid = 1; // 用户唯一标识 optional string _nickname = 2; // 用户昵称 optional string _head_portrait = 3; // 用户头像 optional int64 _head_portrait_version = 4; // 用户唯一标识 optional int64 _sex = 5; // 性别:1,男;2,女 ;0 未知 optional string _last_position = 6; // 用户最后位置:上海市-浦东新区 } message channel_option_struct { optional string _password = 1; // 订阅密码 optional int64 _max_user = 2; // 默认100;为-1,则不限制 optional int64 _max_keep_msg_list_len = 3; // 默认0,处理后立即删除;为-1,则永远不自动删除 optional int64 _max_keep_msg_time = 4; // 默认为系统配置的非永久存储时间,若为0,则处理后立即删除;为-1,则永远不自动删除 optional bool _join_notify = 5; // 默认true,每个新加入/订阅的用户均会双向通知到所有人及将所有人通知给新人 optional bool _leave_notify = 6; // 默认true,每个离开/取消订阅的用户均会双向通知到所有人及将所有人通知给新人 optional bool _online_notify = 7; // 默认true,每个通道内用户上线均会双向通知到所有人及将所有人通知给新人 optional bool _offline_notify = 8; // 默认true,每个通道内用户下线均会双向通知到所有人及将所有人通知给新人 optional int64 _max_offline_wait_time = 9; // 默认0,立即移除该用户;为-1,则永远不自动删除 optional bool _public = 10; // 默认false,仅当前app内可见,作用域为当前app范围;否为为全系统范围 optional bool _auto_destroy = 11; // 默认true,当频道无人时自动销毁 repeated int64 _allow_publish_users = 12; // 默认nil,即允许所有频道范围(app或全局)用户;否则表示将控制允许发布消息的用户 repeated int64 _ban_publish_users = 13; // 默认nil,即允许所有频道范围(app或全局)用户;否则表示将控制禁止发布消息的用户 optional bool _allow_entry = 14; // 是否允许加入,一般在创建时及运行时根据需要修改该字段以控制加入条件 optional bool _enable_cluster = 15; // 启用通道集群 optional int64 _delay_login_millisecond_send = 16; // 默认3000,相对于登录时间延迟发送消息时间 optional bool _allow_modify_all_public_data = 17; // 默认nil,即不允许 optional int64 _allow_entry_millisecond = 18; // 从创建时间起计算,允许加入的最大时间,一般在创建时设置该字段以定时关闭加入功能 optional bool _allow_all_user_invite_user = 19; // 默认nil,即只允许master邀请用户加入 optional bool _only_robot_auto_destroy = 20; // 默认nil,即不会自动销毁 optional bool _client_request_msg = 21; // 默认nil,即由服务器主动推送消息 optional bool _only_read_self_public_data = 22; // 默认nil,即全部均可读 optional bool _client_request_public_data = 23; // 默认nil,即在create_channel或subscribe_channel返回消息中均自动带有_public_data数据,否则需要额外请求get_channel_public_data消息返回;此设置至少适合两种应用场景:1、由master发布内容而其他用户仅能读写自己提交的内容;2、public_data数据很多,采用按需读取模式以优化网络性能; optional bool _user_all_offline_auto_destroy = 25; // 默认nil,即不会自动销毁 optional bool _send_self = 26; // 默认true,即自身发的公有数据会反向发送回自身 } message key_data_struct { optional string _key = 1; optional string _data = 2; optional int64 _service_time = 3; // 服务器收到消息时的服务器时间 } message channel_struct { optional string _channel = 1; optional int64 _creator = 2; optional int64 _create_time = 3; optional int64 _appid = 4; optional int64 _master = 5; optional channel_option_struct _option = 6; repeated int64 _uid_list = 7; optional int64 _service_seq = 8; repeated key_data_struct _public_data = 9; optional string _group = 10; repeated int64 _uid_offline_list = 11; // 对应_uid_list列表的离线时间,如果在线,对应值为0 } message file_meta_info_struct { optional string _name = 1; optional string _tag = 2; // enum: file, directory, link, socket, named pipe, char device, block device or other optional int64 _size = 3; // file size, in bytes } message share_file_struct { repeated int64 _share_uid_list = 1; // 被分享者列表,拥有操作权限的人,若为空,表示为对所有人公开分享 optional string _path = 2; // 分享文件系统的路径,可以是单个文件,也可以是一个目录树的根路径 optional int64 _permission = 3; // 分享权限,采用linux文件权限策略,1表示可执行权限(此处无效),2表示可写权限,4表示可读权限;同样可异或计算,如6表示可读可写 optional bool _forbidden = 4; // true表示反向操作,即取消对之前已分享资源的全部或分支的分享 optional int64 _uid = 5; // 文件所有者,分享者;自己执行分享操作时,此字段被忽略 optional int64 _appid = 6; // 要分享的存储区对应的app,可能为代码区也可能为数据区 optional int64 _is_dev_app = 7; // 是否对应为代码区 } message ranking_data_struct { optional string _key = 1; optional int64 _score = 2; }
客户端请求协议模块
//客户端请求协议模块 //by lj 2015-11 syntax = "proto2"; import "common2.proto"; package up; //-------------------------通用协议--------------------------------------- //用户信息 message get_user_info { repeated int64 _uid_list = 1; //获取_uid的用户信息,获取自己的可不填 } message send_private_msg { repeated int64 _uid_list = 1; optional string _sub_type = 2; optional string _msg = 3; optional bool _enable_offline = 4; // 如果没有这个字段,消息只按在线处理,如果对方不在线则直接丢弃;有这个字段能离线针对发送用户当前app发送 } message get_offline_private_msg { optional int64 _service_time = 1; // 获取这个服务器时间之后的离线消息,如果为空则获取所有服务器目前仍保存的离线消息 } message set_ranking_score { optional string _name = 1; // 例如游戏名 optional string _key = 2; // 例如uid optional int64 _score = 3; // 例如游戏分数,默认为1 optional bool _add = 4; // 非设置而是增加_score值 } message get_ranking { optional string _name = 1; optional string _key = 2; // 除_top_num指定的排行外额外需要包含的项 optional int64 _top_num = 3; optional bool _from_last = 4; // 默认从高分到低分排序,设置此字段为true则获取从最低分开始往高分方向计数 } // 用于表示当前用户喜欢/关注某人或某事物 message set_like { optional string _key = 1; // 例如uid optional bool _like = 2; // 喜欢/关注|取消关注 optional bool _get_like_list = 3; // 同时获取最新的喜欢列表 repeated int64 _uid_robot_list = 4; // 指定uid喜欢,用于运营中机器人机制代替当前管理帐户 } message get_like_num { repeated string _key_list = 1; // 例如{uid} } message get_like_list { optional string _key = 1; // 例如uid } //-------------------------通用协议-------------------------------------- //-------------------------app管理-------------------------------------- // 切换app,系统接口,用户接口不应直接调用 message switch_app { optional int64 _client_version = 1; // 客户端版本号 optional string _verify = 2; // 客户端身份验证 } //-------------------------app管理-------------------------------------- //-------------------------消息管理-------------------------------------- message create_channel { optional string _channel = 1; optional channel_option_struct _channel_option = 2; optional int64 _begin_service_seq = 3; // 默认为nil,表示只发送之后的消息 optional int64 _last_msg_len = 4; // 只查看最后消息条数 repeated int64 _invite_uid_list = 5; optional string _group = 6; optional bool _get_all_public = 7; } message destroy_channel { optional string _channel = 1; } message publish_channel_msg { optional string _channel = 1; optional string _sub_type = 2; optional string _msg = 3; } message subscribe_channel { optional string _channel = 1; optional string _password = 2; optional int64 _begin_service_seq = 3; optional int64 _last_msg_len = 4; // 只查看最后消息条数 optional string _group = 6; optional bool _get_all_public = 7; } message unsubscribe_channel { optional string _channel = 1; } message modify_channel { optional string _channel = 1; optional string _new_name = 2; optional int64 _new_master = 3; optional channel_option_struct _channel_option = 4; // optional bool _public_data_changed = 5; repeated key_data_struct _public_data = 6; repeated int64 _invite_uid_list = 7; repeated int64 _remove_uid_list = 8; repeated int64 _remove_msg_service_seq_list = 9; optional bool _sadd_public_data = 96; // 添加集合值元素 optional bool _push_public_data = 97; // 添加数组值元素 optional bool _increase_public_data = 98; // 增加整数值 optional bool _use_update_mode = 99; } message get_channel_public_data { optional string _channel = 1; repeated string _key_list = 2; } //-------------------------消息管理-------------------------------------- //-------------------------文件存储-------------------------------------- message get_file_list { optional string _path = 1; } message create_dir { optional string _path = 1; optional string _name = 2; } message create_file { optional string _path = 1; optional string _name = 2; optional string _data = 3; optional int64 _total_size = 4; optional bool _auto_rename = 5; optional bool _auto_create_path = 6; } message read_file { optional string _path = 1; optional bool _for_bin = 2; } message write_file { optional string _path = 1; optional string _data = 2; optional bool _append = 3; optional bool _for_bin = 4; optional bool _for_base64 = 5; optional bool _continued = 6; // 数据分包待续 optional int64 _total_size = 7; } message rename_file { optional string _path = 1; optional string _name = 2; optional string _new_name = 3; } message rename_dir { optional string _path = 1; optional string _name = 2; optional string _new_name = 3; } message move_file { optional string _from_path = 1; optional string _to_path = 2; optional bool _auto_rename = 5; } message move_dir { optional string _from_path = 1; optional string _to_path = 2; optional bool _auto_rename = 5; } message del_file { optional string _path = 1; } message del_dir { optional string _path = 1; } message unzip_file { optional string _path = 1; } //分享或取消分享:可通过_forbidden字段实现取消分享 message share_file { optional share_file_struct _share_file = 1; } message get_self_share_file { } message get_share_file { optional int64 _uid = 1; // 获取指定用户给自己的分享,若为空,则表示所有用户分享给自己的或完全公开分享的文件列表 optional int64 _number_per_page = 2; // 每页获取数量 optional int64 _page_index = 3; // 获取的页索引 } message search_public_share_file { optional string _file_name = 1; // 按文件名搜索 optional string _file_ext_name = 2; // 按文件扩展名搜索,参数可以二选一,也可以同时存在 } message mount_share_file { optional int64 _uid = 1; // 挂载的其他用户,服务器验证该资源是否被分享给当前用户或为公开分享资源 optional string _path = 2; // 挂载的其他用户分享文件系统的路径 optional int64 _appid = 3; // 挂载的其他用户开发的appid,且文件基于该app的代码区;若未设置,则认为是挂载到当前用户app(正在开发(优先)或正在使用)对应的其他用户的数据存储区,这里不存在挂载到其他用户开发的app的数据区概念或需求场景 optional int64 _is_dev_app = 4; // 是否对应为代码区 } message unmount_share_file { } //-------------------------文件存储-------------------------------------- //-------------------------对象存储-------------------------------------- // 注意:__shared字段作为系统保留字段名,用作配置该对象是否及具体可供其他哪些人共享读取 // 覆盖模式 message store_set { optional string _data = 1; // 必须为json字符串,sdk接口应直接传入js对象,sdk将会转换为json字符串; } // 更新模式 message store_update { optional string _data = 1; // 必须为json字符串,sdk接口应直接传入js对象,sdk将会转换为json字符串 } message store_remove { optional string _key = 1; // key可以包含【.】为多级结构 } message store_get { optional string _key = 1; // key可以包含【.】为多级结构 optional int64 _uid_res = 2; // 共享访问模式,需要资源拥有者设置的该对象或对象的上层祖先拥有__shared字段权限 optional int64 _appid_res = 3; // 共享访问模式,需要资源拥有者设置的该对象或对象的上层祖先拥有__shared字段权限 } message store_increase { optional string _key = 1; // key可以包含【.】为多级结构 optional int64 _val = 2; // _val可为正负数,若为0则变为查询,可直接使用store_get协议;此值默认为1 } // 可考虑增加删除和获取的批操作,_key设计为数组 //-------------------------对象存储--------------------------------------
服务器回应客户端请求协议模块
//服务器回应客户端请求协议模块 //by lj 2015-11 syntax = "proto2"; import "common2.proto"; package down; //-------------------------通用协议-------------------------------------- //获取用户信息 message get_user_info { repeated user_base_info_struct _user_base_info = 1; // 用户基本信息 } message modify_user_info { optional user_base_info_struct _user_base_info = 1; } message send_private_msg { optional int64 _uid = 1; optional string _sub_type = 2; optional string _msg = 3; optional int64 _service_time = 4; // 服务器收到消息时的服务器时间 } // 此消息不会真正返回,仅作为生成请求的协议号用,具体返回通过send_private_msg统一代替 message get_offline_private_msg { } message set_ranking_score { optional string _name = 1; optional string _key = 2; optional int64 _score = 3; } message get_ranking { optional string _name = 1; optional ranking_data_struct _key_data = 2; // 除_top_num指定的排行外额外需要包含的项 optional int64 _key_ranking = 3; repeated ranking_data_struct _data = 4; } message set_like { optional string _key = 1; // 例如uid optional bool _like = 2; // 喜欢/关注|取消关注 optional int64 _uid_num = 3; // 最新喜欢数 repeated int64 _uid_list = 4; // 喜欢的用户列表 repeated int64 _uid_robot_list = 5; // 指定uid喜欢,用于运营中机器人机制代替当前管理帐户 } message get_like_num { repeated string _key_list = 1; // 例如{uid} repeated int64 _uid_num_list = 2; // 与_key_list索引对应喜欢数 repeated bool _like_list = 3; // 与_key_list索引对应key当前用户是否喜欢 } message get_like_list { optional string _key = 1; // 例如uid repeated int64 _uid_list = 2; } //-------------------------通用协议-------------------------------------- //-------------------------app管理-------------------------------------- // 切换app message switch_app { optional int64 _appid = 1; // 将当前工作环境切换到此app } //-------------------------app管理-------------------------------------- //-------------------------消息管理-------------------------------------- message create_channel { optional channel_struct _info = 1; } message destroy_channel { optional string _channel = 1; } message publish_channel_msg { optional int64 _uid = 1; optional string _channel = 2; optional string _sub_type = 3; optional string _msg = 4; // 可以为普通对象类型,sdk回调应用层前将会把此数据json解析出来 optional int64 _service_time = 5; // 服务器收到消息时的服务器时间 optional int64 _service_seq = 6; // 服务器收到消息的序号,每个channel独立计算,从0开始 optional int64 __system_param = 7; // 系统sdk使用参数,应用层不会使用 } message subscribe_channel { optional channel_struct _info = 1; } message unsubscribe_channel { optional string _channel = 1; } // 主要用于会引发对channel进行修改的相关协议操作后的广播通知,如:modify_channel、add_channel_allow_publish_users、remove_channel_allow_publish_users、add_channel_ban_publish_users、remove_channel_ban_publish_users、set_channel_public_data及unsubscribe_channel(会引发master_change)等,注意:这里我们采用增量更新模式,非全量模式,主要针对_allow_publish_users、_ban_publish_users、_public_data等字段;除了publish_channel_msg其余数据和状态变化均用此协议通知 message modify_channel { optional string _channel = 1; optional bool _master_changed = 2; optional int64 _master = 3; optional bool _password_changed = 4; optional string _password = 5; optional bool _allow_publish_users_changed = 6; repeated int64 _allow_publish_users = 7; // 通过-uid来表示删除,为空表示删除列表 optional bool _ban_publish_users_changed = 8; repeated int64 _ban_publish_users = 9; // 通过-uid来表示删除,为空表示删除列表 optional bool _allow_entry_changed = 10; optional bool _allow_entry = 11; optional bool _public_data_changed = 12; repeated key_data_struct _public_data = 13; optional bool _name_changed = 14; optional string _name = 15; // 以下4个用户事件区别借用publish_channel_msg方案:此套方案为即时消息模式,不会记入历史消息队列中,离线用户将接收不到此类消息;消息模式方案则反之;理论上应做到两套方案不影响用户使用接口,只影响逻辑意义细节;偏向于后续调整为此套方案 optional int64 _user_join = 16; optional int64 _user_leave = 17; optional int64 _user_online = 18; optional int64 _user_offline = 19; optional int64 _service_time = 20; // 毫秒,主要为兼容publish_channel_msg模式用,后期可考虑替换完旧有代码后删除 optional int64 _uid = 21; // 命令原始请求者 optional bool _allow_entry_millisecond_changed = 22; optional int64 _allow_entry_millisecond = 23; optional bool _invite_uid_list_changed = 24; repeated int64 _invite_uid_list = 25; optional bool _remove_uid_list_changed = 26; repeated int64 _remove_uid_list = 27; optional bool _only_robot_auto_destroy_changed = 28; optional bool _only_robot_auto_destroy = 29; optional bool _client_request_msg_changed = 30; optional bool _client_request_msg = 31; optional bool _remove_msg_service_seq_list_changed = 32; repeated int64 _remove_msg_service_seq_list = 33; optional bool _use_update_mode = 99; } message get_channel_public_data { optional string _channel = 1; repeated key_data_struct _public_data = 2; } message search_channel { optional int64 _appid = 1; optional int64 _master = 2; repeated string _tag_list = 3; repeated string _channel_list = 4; } // TODO: 还未实现 message config_channel { repeated string _disable_channel = 1; // 屏蔽频道(黑名单),允许使用通配符 optional bool _disable_invite = 2; // 屏蔽被通过modify_channel的_invite_uid_list功能邀请加入频道 repeated int64 _disable_uid_list = 3; // 屏蔽这些用户通过上面功能邀请加入其所在频道 optional bool _use_update_mode = 99; } //-------------------------消息管理-------------------------------------- //-------------------------文件存储-------------------------------------- message get_file_list { optional string _path = 1; repeated file_meta_info_struct _files = 2; } message create_dir { optional string _path = 1; optional string _name = 2; } message create_file { optional string _path = 1; optional string _name = 2; } message read_file { optional string _path = 1; optional bool _for_bin = 2; optional string _data = 3; } message write_file { optional string _path = 1; optional bool _continued = 2; // 数据分包待续 } message rename_file { optional string _path = 1; optional string _name = 2; optional string _new_name = 3; } message rename_dir { optional string _path = 1; optional string _name = 2; optional string _new_name = 3; } message move_file { optional string _from_path = 1; optional string _to_path = 2; } message move_dir { optional string _from_path = 1; optional string _to_path = 2; } message del_file { optional string _path = 1; } message del_dir { optional string _path = 1; } message unzip_file { optional string _path = 1; } message share_file { optional share_file_struct _share_file = 1; } message get_self_share_file { repeated share_file_struct _share_file = 1; } message get_share_file { repeated share_file_struct _share_file = 1; optional int64 _number_per_page = 2; // 每页获取数量 optional int64 _page_index = 3; // 获取的页索引 } message search_public_share_file { repeated share_file_struct _share_file = 1; } message mount_share_file { optional int64 _uid = 1; // 挂载的其他用户,服务器验证该资源是否被分享给当前用户或为公开分享资源 optional int64 _appid = 2; // 挂载的其他用户开发的appid optional string _path = 3; // 挂载的其他用户分享文件系统的路径 repeated file_meta_info_struct _files = 4; // 此时的路径均是相对于_path参数下的子路径,且此后直到退出登录或断线或请求unmount_share_file之前的所有文件接口均为相对此分享路径下的子路径 } message unmount_share_file { // 后续文件系统接口恢复为针对自己的文件系统资源 repeated file_meta_info_struct _files = 1; // 自身文件系统根目录下文件列表 } //-------------------------文件存储-------------------------------------- //-------------------------对象存储-------------------------------------- message store_set { } message store_update { } message store_remove { optional string _key = 2; // 默认为根路径,key可以包含【.】为多级结构 } message store_get { optional string _key = 1; // key可以包含【.】为多级结构 optional string _data = 2; // 为json字符串,sdk会将其转换为js对象再传给app } message store_increase { optional string _key = 1; // key可以包含【.】为多级结构 optional int64 _val = 2; // _val可为正负数及0 optional int64 _cur = 3; // 增加_add之后的最新当前值 } //-------------------------对象存储--------------------------------------