ywl
2025-07-02 c7df7556e073d5e3953d17f94c35517f1ee48410
Server/common_type.h
@@ -1,31 +1,44 @@
#ifndef TCPDATATYPE_H
#define TCPDATATYPE_H
/*        */
/*
 * 客户端与服务器交互的动作类型枚举
 * 注意:使用 enum class 避免命名冲突(C++11特性)
 */
enum class ActionType
{
    HeartCheck = 100,
    Login = 110,
    Register = 120,
    Msg = 200,
    Download = 300
    HeartCheck = 100,  // 心跳检测(保持连接活性)
    Login = 110,       // 登录请求
    Register = 120,    // 注册请求
    Msg = 200,        // 普通消息传输
    Download = 300     // 文件下载请求
};
/* ο HTTP    Ӧ  */
/*
 * HTTP风格响应状态码(简化版)
 * 用于服务器向客户端返回操作结果状态
 */
enum class ResponseCode
{
    ResponseOK = 200,      //     ɹ
    BadRequest = 400,      //  ͻ             󣬷      ޷
    Unauthorized = 401,    //     Ҫ   û        ֤
    Forbidden = 403,       //              ͻ  ˵    󣬵  Ǿܾ ִ д
    NotFound = 404,        //        ޷  ҵ        Դ
    MethodNotAllowed = 405 //  ͻ        еķ       ֹ
    ResponseOK = 200,      // 成功(OK)
    BadRequest = 400,      // 错误请求(客户端请求语法错误)
    Unauthorized = 401,    // 未授权(需要身份验证)
    Forbidden = 403,       // 禁止访问(权限不足)
    NotFound = 404,        // 未找到(请求资源不存在)
    MethodNotAllowed = 405 // 方法不允许(如用GET请求POST接口)
};
/*  Ϣ  */
/*
 * 通用消息头结构(所有数据包必须包含)
 * 作用:标识消息类型和基本信息
 */
struct Head
{
    ActionType type;
    int len;
    int version;
    ActionType type;    // 消息类型(对应ActionType枚举)
    int len;           // 整个数据包的长度(字节数)
    int version;       // 协议版本号(用于兼容性控制)
    // 构造函数(初始化时必须提供三个参数)
    Head(ActionType ptype, int plen, int pversion)
    {
        len = plen;
@@ -33,40 +46,61 @@
        version = pversion;
    }
};
struct HeartCheckReq //
/*
 * 心跳检测请求结构
 * 特点:固定类型和长度(不需要额外数据)
 */
struct HeartCheckReq
{
    ActionType type;
    int len;
    ActionType type;  // 固定为ActionType::HeartCheck
    int len;         // 结构体自身大小
    HeartCheckReq()
    {
        type = ActionType::HeartCheck;
        len = sizeof(HeartCheckReq);
        len = sizeof(HeartCheckReq);  // 自动计算结构体大小
    }
};
struct HeartCheckRes //       Ӧ
/*
 * 心跳检测响应结构
 * 注意:与请求结构相同(实际可能包含服务器状态信息)
 */
struct HeartCheckRes
{
    ActionType type;
    int len;
    ActionType type;  // 固定为ActionType::HeartCheck
    int len;         // 结构体自身大小
    HeartCheckRes()
    {
        type = ActionType::HeartCheck;
        len = sizeof(HeartCheckRes);
    }
};
/*
 * 用户注册请求结构
 * 组成:消息头 + 用户信息字段
 */
struct RegisterRequest
{
    Head head;
    char name[64];
    char password[64];
    char email[32];
    char phone[32];
    Head head;        // 必须包含的消息头
    char name[64];    // 用户名(固定长度64字节)
    char password[64];// 密码(建议加密存储)
    char email[32];   // 邮箱(用于找回密码)
    char phone[32];   // 手机号(可选验证)
};
/*
 * 用户登录请求结构
 * 注意:比注册请求少邮箱和手机字段
 */
struct LoginRequest
{
    Head head;
    char name[64];
    char password[64];
    Head head;        // 消息头(type应为ActionType::Login)
    char name[64];    // 用户名
    char password[64];// 密码(建议加密传输)
};
#endif
#endif // TCPDATATYPE_H