Skip to content

ChatPacket.proto 文档 ​

本文档详细描述了即时通讯系统中使用的 ChatPacket.proto 文件,该文件基于 Protocol Buffers(protobuf)定义了通讯协议中的各类消息结构和命令类型。本文档不仅对原始的 .proto 文件进行了润色和格式优化,还根据前述通讯协议的内容修复了其中的错误,确保协议的一致性和完整性。

协议概述 ​

ChatPacket.proto 文件定义了即时通讯系统中所有可能的消息类型及其结构。通过使用 Protocol Buffers,消息在客户端与服务器之间进行高效的序列化与反序列化,确保通讯的高效性与可靠性。


proto
syntax = "proto3";

package nexus.io.protobuf;

option java_outer_classname = "ChatPacketOuter";

// 命令类型枚举
enum CommandType {
    COMMAND_ERROR = 0;               // 错误信息
    COMMAND_ACK = 1;                 // 确认消息
    COMMAND_HANDSHAKE_REQ = 2;       // 握手请求
    COMMAND_HANDSHAKE_RESP = 3;      // 握手响应
    COMMAND_AUTH_REQ = 4;            // 鉴权请求
    COMMAND_AUTH_RESP = 5;           // 鉴权响应
    COMMAND_LOGIN_REQ = 6;           // 登录请求
    COMMAND_LOGIN_RESP = 7;          // 登录响应
    COMMAND_CHAT_REQ = 11;           // 聊天消息请求
    COMMAND_CHAT_RESP = 12;          // 聊天消息响应
    COMMAND_MESSAGE_READ_REQ = 13;   // 已读请求
    COMMAND_MESSAGE_READ_RESP = 14;  // 已读响应
    COMMAND_RECALL_MSG_REQ = 15;     // 撤回消息请求
    COMMAND_RECALL_MSG_RESP = 16;    // 撤回消息响应
    COMMAND_GET_USER_REQ = 17;       // 获取用户信息请求
    COMMAND_GET_USER_RESP = 18;      // 获取用户信息响应
    COMMAND_CREATE_GROUP_REQ = 19;   // 创建群请求
    COMMAND_CREATE_GROUP_RESP = 20;  // 创建群响应
    COMMAND_DISBAND_GROUP_REQ = 21;  // 解散群请求
    COMMAND_DISBAND_GROUP_RESP = 22; // 解散群响应
    COMMAND_INVITE_TO_GROUP_REQ = 23;// 邀请加入群请求
    COMMAND_INVITE_TO_GROUP_RESP = 24;// 邀请加入群响应
    COMMAND_JOIN_GROUP_REQ = 25;     // 加入群请求
    COMMAND_JOIN_GROUP_RESP = 26;    // 加入群响应
    COMMAND_LEAVE_GROUP_REQ = 27;    // 退出群请求
    COMMAND_LEAVE_GROUP_RESP = 28;   // 退出群响应
    COMMAND_MUTE_GROUP_REQ = 29;     // 屏蔽群请求
    COMMAND_MUTE_GROUP_RESP = 30;    // 屏蔽群响应
    COMMAND_GROUP_MESSAGE_REQ = 31;  // 群发消息请求
    COMMAND_GROUP_MESSAGE_RESP = 32; // 群发消息响应
}

// 主消息结构
message ChatPacket {
    CommandType cmd = 1;          // 命令码,表示消息类型
    int64 sequence = 2;           // 消息序列号,用于消息的唯一标识和重发机制
    int64 ack = 3;                // 确认的消息序列号,可选
    string from = 4;              // 发送方ID
    string to = 5;                // 接收方ID
    int64 timestamp = 6;          // 消息创建时间,UTC时间戳
    string token = 7;             // 鉴权令牌,可选

    string groupId = 8;           // 群聊消息时使用的群ID,可选

    oneof body {
        HandshakeMessage handshakeMessage = 9;               // 握手消息
        AuthMessage authMessage = 10;                         // 鉴权消息
        LoginMessage loginMessage = 11;                       // 登录请求消息
        LoginResponse loginResponse = 12;                     // 登录响应消息
        ChatMessage chatMessage = 13;                         // 聊天请求消息
        ChatResponse chatResponse = 14;                       // 聊天响应消息
        HeartbeatMessage heartbeatMessage = 15;               // 心跳消息
        CloseMessage closeMessage = 16;                        // 关闭、退出消息
        GetUserMessage getUserMessage = 17;                    // 获取用户信息请求消息
        GetUserResponse getUserResponse = 18;                  // 获取用户信息响应消息

        // 群聊消息
        CreateGroupMessage createGroupMessage = 19;            // 创建群请求消息
        CreateGroupResponse createGroupResponse = 20;          // 创建群响应消息
        DisbandGroupMessage disbandGroupMessage = 21;          // 解散群请求消息
        DisbandGroupResponse disbandGroupResponse = 22;        // 解散群响应消息
        InviteToGroupMessage inviteToGroupMessage = 23;        // 邀请加入群请求消息
        InviteToGroupResponse inviteToGroupResponse = 24;      // 邀请加入群响应消息
        JoinGroupMessage joinGroupMessage = 25;                // 加入群请求消息
        JoinGroupResponse joinGroupResponse = 26;              // 加入群响应消息
        LeaveGroupMessage leaveGroupMessage = 27;              // 退出群请求消息
        LeaveGroupResponse leaveGroupResponse = 28;            // 退出群响应消息
        MuteGroupMessage muteGroupMessage = 29;                // 屏蔽群请求消息
        MuteGroupResponse muteGroupResponse = 30;              // 屏蔽群响应消息
        GroupChatMessage groupChatMessage = 31;                // 群发消息请求
        GroupChatResponse groupChatResponse = 32;              // 群发消息响应消息
    }
}

// 握手消息
message HandshakeMessage {
    bytes hbyte = 1; // 握手字节数据
}

// 鉴权消息
message AuthMessage {
    string token = 1; // 鉴权令牌
}

// 登录请求消息
message LoginMessage {
    string loginname = 1;   // 登录名
    string password = 2;    // 密码
    string token = 3;       // 鉴权令牌
    bool anonymous = 4;     // 是否匿名登录,默认为false
}

// 登录响应消息
message LoginResponse {
    int32 result = 1;       // 1: 成功, 其他: 错误代码
    string message = 2;     // 描述信息
    string userId = 3;      // 用户ID,成功时返回
}

// 聊天请求消息
message ChatMessage {
    string msgType = 1; // "text", "image", "audio", "video", "news", "markdown"
    oneof content {
        TextContent textContent = 2;
        ImageContent imageContent = 3;
        AudioContent audioContent = 4;
        VideoContent videoContent = 5;
        NewsContent newsContent = 6;
        MarkdownContent markdownContent = 7;
    }
}

// 文本消息内容
message TextContent {
    string text = 1; // 文本内容
}

// 图片消息内容
message ImageContent {
    string url = 1;       // 图片URL
    int32 width = 2;      // 图片宽度
    int32 height = 3;     // 图片高度
    string format = 4;    // 图片格式,如 "png", "jpg"
}

// 音频消息内容
message AudioContent {
    string url = 1;       // 音频URL
    int32 duration = 2;   // 音频时长,单位秒
    string format = 3;    // 音频格式,如 "mp3"
}

// 视频消息内容
message VideoContent {
    string url = 1;           // 视频URL
    int32 duration = 2;       // 视频时长,单位秒
    string thumbnail = 3;     // 缩略图URL
    string format = 4;        // 视频格式,如 "mp4"
}

// 新闻消息内容
message NewsContent {
    string title = 1;       // 新闻标题
    string description = 2; // 新闻描述
    string url = 3;         // 新闻链接
    string image = 4;       // 新闻图片URL
}

// Markdown消息内容
message MarkdownContent {
    string markdown = 1; // Markdown格式的文本
}

// 聊天响应消息
message ChatResponse {
    int32 status = 1;    // 1: 成功, 其他: 错误代码
    string message = 2;  // 描述信息
    string id = 3;       // 服务器生成的唯一消息ID(雪花ID)
}

// 心跳消息
message HeartbeatMessage {
    bytes hbbyte = 1; // 心跳字节数据
}

// 关闭、退出消息
message CloseMessage {
    // 无额外字段
}

// 关闭响应消息
message CloseResponse {
    int32 status = 1;    // 1: 成功, 其他: 错误代码
    string message = 2;  // 描述信息
}

// 获取用户信息请求消息
message GetUserMessage {
    string userId = 1;    // type为0时必填
    string groupId = 2;   // type为1时必填
    int32 type = 3;       // 0: 获取好友信息, 1: 获取指定组信息, 2: 获取所有在线用户, 3: 获取所有用户
}

// 获取用户信息响应消息
message GetUserResponse {
    repeated UserInfo users = 1; // 用户信息列表
}

// 用户信息结构
message UserInfo {
    string userId = 1;      // 用户ID
    string username = 2;    // 用户名
    string nickname = 3;    // 昵称
    string avatar = 4;      // 头像URL
    int32 status = 5;       // 用户状态,0: 离线, 1: 在线
    // 可根据需求扩展更多字段
}

// 创建群请求消息
message CreateGroupMessage {
    string groupName = 1;          // 群名称
    repeated string members = 2;    // 初始成员列表(可选)
    string description = 3;        // 群描述
}

// 创建群响应消息
message CreateGroupResponse {
    int32 result = 1;       // 1: 成功, 其他: 错误代码
    string message = 2;     // 描述信息
    string groupId = 3;     // 新创建的群ID
}

// 解散群请求消息
message DisbandGroupMessage {
    string groupId = 1; // 群ID
}

// 解散群响应消息
message DisbandGroupResponse {
    int32 result = 1;       // 1: 成功, 其他: 错误代码
    string message = 2;     // 描述信息
}

// 邀请加入群请求消息
message InviteToGroupMessage {
    string groupId = 1;               // 群ID
    repeated string invitees = 2;     // 被邀请者ID列表
}

// 邀请加入群响应消息
message InviteToGroupResponse {
    int32 result = 1;       // 1: 成功, 其他: 错误代码
    string message = 2;     // 描述信息
}

// 加入群请求消息
message JoinGroupMessage {
    string groupId = 1; // 群ID
}

// 加入群响应消息
message JoinGroupResponse {
    int32 result = 1;       // 1: 成功, 其他: 错误代码
    string message = 2;     // 描述信息
}

// 退出群请求消息
message LeaveGroupMessage {
    string groupId = 1; // 群ID
}

// 退出群响应消息
message LeaveGroupResponse {
    int32 result = 1;       // 1: 成功, 其他: 错误代码
    string message = 2;     // 描述信息
}

// 屏蔽群请求消息
message MuteGroupMessage {
    string groupId = 1; // 群ID
    bool mute = 2;      // true: 屏蔽, false: 取消屏蔽
}

// 屏蔽群响应消息
message MuteGroupResponse {
    int32 result = 1;       // 1: 成功, 其他: 错误代码
    string message = 2;     // 描述信息
}

// 群发消息请求消息
message GroupChatMessage {
    string msgType = 1; // "text", "image", "audio", "video", "news", "markdown"
    oneof content {
        TextContent textContent = 2;
        ImageContent imageContent = 3;
        AudioContent audioContent = 4;
        VideoContent videoContent = 5;
        NewsContent newsContent = 6;
        MarkdownContent markdownContent = 7;
    }
}

// 群发消息响应消息
message GroupChatResponse {
    int32 status = 1;    // 1: 成功, 其他: 错误代码
    string message = 2;  // 描述信息
}

MIT Licensed