syntax = "proto3"; package pb; option go_package = "gim/pkg/pb/"; message Empty{} service LogicInt { // 登录 rpc ConnSignIn (ConnSignInReq) returns (Empty); // 消息同步 rpc Sync (SyncReq) returns (SyncResp); // 设备收到消息回执 rpc MessageACK (MessageACKReq) returns (Empty); // 设备离线 rpc Offline (OfflineReq) returns (Empty); // 订阅房间 rpc SubscribeRoom(SubscribeRoomReq)returns(Empty); // 发送消息 rpc SendMessage (SendMessageReq) returns (SendMessageResp); // 推送消息到房间 rpc PushRoom(PushRoomReq)returns(Empty); // 全服推送 rpc PushAll(PushAllReq)returns(Empty); // 获取设备信息 rpc GetDevice (GetDeviceReq) returns (GetDeviceResp); // 服务停止 rpc ServerStop (ServerStopReq) returns (Empty); } message PushRoomReq{ int64 room_id = 1; // 房间id MessageType message_type = 2; // 消息类型 bytes message_content = 3; // 消息内容 int64 send_time = 4; // 消息发送时间戳,精确到毫秒 bool is_persist = 5; // 是否将消息持久化 bool is_priority = 6; // 是否优先推送 } message SendMessageResp { int64 seq = 1; // 消息序列号 } message SendMessageReq { ReceiverType receiver_type = 1; // 接收者类型,1:user;2:group int64 receiver_id = 2; // 用户id或者群组id repeated int64 to_user_ids = 3; // 需要@的用户id列表 MessageType message_type = 4; // 消息类型 bytes message_content = 5; // 消息内容 int64 send_time = 6; // 消息发送时间戳,精确到毫秒 bool is_persist = 7; // 是否将消息持久化到数据库 } enum ReceiverType { RT_UNKNOWN = 0; // 未知 RT_USER = 1; // 用户 RT_GROUP = 2; // 群组 RT_ROOM = 3; // 房间 } // 消息类型 enum MessageType { MT_UNKNOWN = 0; // 未知 MT_TEXT = 1; // 文本 MT_FACE = 2; // 表情 MT_VOICE = 3; // 语音消息 MT_IMAGE = 4; // 图片 MT_FILE = 5; // 文件 MT_LOCATION = 6; // 地理位置 MT_COMMAND = 7; // 指令推送 MT_CUSTOM = 8; // 自定义 } enum SenderType { ST_UNKNOWN = 0; // 未知的 ST_SYSTEM = 1; // IM系统 ST_USER = 2; // 用户 ST_BUSINESS = 3; // 业务方 } message Sender { SenderType sender_type = 1; // 发送者类型,1:系统,2:用户,3:第三方业务系统 int64 sender_id = 2; // 发送者id int64 device_id = 3; // 发送者设备id string avatar_url = 4; // 昵称 string nickname = 5; // 头像 string extra = 6; // 扩展字段 } // 单条消息投递内容(估算大约100个字节),todo 通知栏提醒 message Message { Sender sender = 1; // 发送者 ReceiverType receiver_type = 2; // 接收者类型,1:user;2:group int64 receiver_id = 3; // 用户id或者群组id repeated int64 to_user_ids = 4; // 需要@的用户id列表 MessageType message_type = 5; // 消息类型 bytes message_content = 6; // 消息内容 int64 seq = 7; // 用户消息发送序列号 int64 send_time = 8; // 消息发送时间戳,精确到毫秒 MessageStatus status = 9; // 消息状态 } enum MessageStatus { MS_UNKNOWN = 0; // 未知的 MS_NORMAL = 1; // 正常的 MS_RECALL = 2; // 撤回 } message ConnSignInReq { int64 device_id = 1; // 设备id int64 user_id = 2; // 用户id string token = 3; // 秘钥 string conn_addr = 4; // 服务器地址 string client_addr = 5; // 客户端地址 } message SyncReq { int64 user_id = 1; // 用户id int64 device_id = 2; // 设备id int64 seq = 3; // 客户端已经同步的序列号 } message SyncResp { repeated Message messages = 1; // 消息列表 bool has_more = 2; // 是否有更多数据 } message MessageACKReq { int64 user_id = 1; // 用户id int64 device_id = 2; // 设备id int64 device_ack = 3; // 设备收到消息的确认号 int64 receive_time = 4; // 消息接收时间戳,精确到毫秒 } message OfflineReq { int64 user_id = 1; // 用户id int64 device_id = 2; // 设备id string client_addr = 3; // 客户端地址 } message SubscribeRoomReq{ int64 user_id = 1; // 用户id int64 device_id = 2; // 设备id int64 room_id = 3; // 房间id int64 seq = 4; // 消息序列号 string conn_addr = 5; // 服务器地址 } message PushAllReq{ MessageType message_type = 1; // 消息类型 bytes message_content = 2; // 消息内容 int64 send_time = 3; // 消息发送时间戳,精确到毫秒 } message GetDeviceReq { int64 device_id = 1; } message GetDeviceResp { Device device = 1; } message Device { int64 device_id = 1; // 设备id int64 user_id = 2; // 用户id int32 type = 3; // 设备类型,1:Android;2:IOS;3:Windows; 4:MacOS;5:Web string brand = 4; // 手机厂商 string model = 5; // 机型 string system_version = 6; // 系统版本 string sdk_version = 7; // SDK版本 int32 status = 8; // 在线状态,0:不在线;1:在线 string conn_addr = 9; // 服务端连接地址 string client_addr = 10; // 客户端地址 int64 create_time = 11; // 创建时间 int64 update_time = 12; // 更新时间 } message ServerStopReq { string conn_addr = 1; }