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 { optional string single_chat_friend_id = 1;//群聊会话不需要设置,单聊会话设置为对方ID 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 { optional string file_id = 1;//图片文件id,客户端发送的时候不用设置,由transmit服务器进行设置后交给storage的时候设置 optional bytes image_content = 2;//图片数据,在ES中存储消息的时候只要id不要文件数据, 服务端转发的时候需要原样转发 } message FileMessageInfo { optional string file_id = 1;//文件id,客户端发送的时候不用设置 int64 file_size = 2;//文件大小 string file_name = 3;//文件名称 optional bytes file_contents = 4;//文件数据,在ES中存储消息的时候只要id和元信息,不要文件数据, 服务端转发的时候也不需要填充 } message SpeechMessageInfo { optional string file_id = 1;//语音文件id,客户端发送的时候不用设置 optional bytes file_contents = 2;//文件数据,在ES中存储消息的时候只要id不要文件数据, 服务端转发的时候也不需要填充 } 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 Message { string request_id = 1; MessageInfo message = 2; } message FileDownloadData { string file_id = 1; bytes file_content = 2; } message FileUploadData { string file_name = 1; int64 file_size = 2; bytes file_content = 3; }