syntax = "proto3"; package bite_im; option cc_generic_services = true; //用户信息结构 message UserInfo { string user_id = 1;//用户ID string nickname = 2;//昵称 string description = 3;//个人签名/描述 string phone = 4; //绑定手机号 bytes avatar = 5;//头像照片,文件内容使用二进制 } //聊天会话信息 message ChatSessionInfo { //群聊会话不需要设置,单聊会话设置为对方用户ID optional string single_chat_friend_id = 1; string chat_session_id = 2; //会话ID string chat_session_name = 3;//会话名称git //会话上一条消息,新建的会话没有最新消息 optional MessageInfo prev_message = 4; //会话头像 --群聊会话不需要,直接由前端固定渲染,单聊就是对方的头像 optional bytes avatar = 5; } //消息类型 enum MessageType { STRING = 0; IMAGE = 1; FILE = 2; SPEECH = 3; } message StringMessageInfo { string content = 1;//文字聊天内容 } message ImageMessageInfo { //图片文件id,客户端发送的时候不用设置,由transmit服务器进行设置后交给storage的时候设置 optional string file_id = 1; //图片数据,在ES中存储消息的时候只要id不要文件数据, 服务端转发的时候需要原样转发 optional bytes image_content = 2; } message FileMessageInfo { optional string file_id = 1;//文件id,客户端发送的时候不用设置 optional int64 file_size = 2;//文件大小 optional string file_name = 3;//文件名称 //文件数据,在ES中存储消息的时候只要id和元信息,不要文件数据, 服务端转发的时候也不需要填充 optional bytes file_contents = 4; } message SpeechMessageInfo { //语音文件id,客户端发送的时候不用设置 optional string file_id = 1; //文件数据,在ES中存储消息的时候只要id不要文件数据, 服务端转发的时候也不需要填充 optional bytes file_contents = 2; } message MessageContent { MessageType message_type = 1; //消息类型 oneof msg_content { StringMessageInfo string_message = 2;//文字消息 FileMessageInfo file_message = 3;//文件消息 SpeechMessageInfo speech_message = 4;//语音消息 ImageMessageInfo image_message = 5;//图片消息 }; } //消息结构 message MessageInfo { string message_id = 1;//消息ID string chat_session_id = 2;//消息所属聊天会话ID int64 timestamp = 3;//消息产生时间 UserInfo sender = 4;//消息发送者信息 MessageContent message = 5; } message FileDownloadData { string file_id = 1; bytes file_content = 2; } message FileUploadData { string file_name = 1; //文件名称 int64 file_size = 2; //文件大小 bytes file_content = 3; //文件数据 }