Skip to content

Latest commit

 

History

History
85 lines (61 loc) · 2.67 KB

数据包格式.md

File metadata and controls

85 lines (61 loc) · 2.67 KB

数据包格式

Package类

  • 该类作为客户端与服务器通信的协议

  • 自带的构造函数将添加8字节的包信息在包头(包类型以及包大小)

  • 可自己定义不同包类型的数据格式,但应告诉服务器端该类型的数据处理格式(包类型必须在包头)


客户端->服务器

包类型

//不同数据段用特定的分割方式
    enum PackageType{
        //请求登录,应携带用户id及密码数据 使用\n分割
        LOGIN = 0,

        //注册信号
        REGISTER,

        /*
         * 在codeEdit->document 发出 void contentsChange(int position, int charsRemoved, int charsAdded) 信号时应及时向服务器发送该类型数据
         * 应携带改变的文本数据所在的文件id、用户id、文本改变的位置、改变的文本数据(该文本数据可能含有\n,所以不能使用\n分割)
         * 可使用4字节携带文件id,4字节携带用户id的size+用户id,4字节携带文本数据size+文本数据的格式
        */
        TEXT_CHANGE,

        //从服务器获取项目,携带所需项目id
        GET_PROJECT,
        
        //从服务器获取当前用户参与的所有项目基本信息 无需携带其他数据
        INIT_PROJS

        //提交保存信号,携带文件id及提交者信息(用户名)
        SUBMIT,

        //上传项目保存至服务器端,携带文件名,文件大小,用户id,权限,后续应开辟线程发送项目文件
        POST_PROJECT
            
        //创建云项目,携带项目名称
        NEW_PROJECT
    };

API

	//获取处理后的包数据
    QByteArray getPdata(){return p_data;}

    //将int类型的值转换为4字节字节数组
    static QByteArray intToByteArr(int num);

    /*
     * 将字节数组转换为int值
     *
     * Parameter arr : 字节数组
     * Parameter offset : 偏移量 若为0则将数组位置0后的四个字节数据转换为int
    */
    static int ByteArrToInt(QByteArray arr,int offset=0);

    //获取处理后的包数据大小
    int getSize(){return size;}

服务器返回码

//服务器返回值
enum ReturnType {
        ALLOW = 0,	//登录成功,返回用户上次打开的项目的信息
        ERROR,		//错误,后携带错误信息
    	USER_PROJS,	//返回该用户参加的所有项目信息 (项目id+\t+项目名+\t+项目所有者) 两行数据间用\n分割
        PROJ_INFO,	//返回某一个项目信息 (项目id+\t+项目名+\t+项目所有者)
        NEW_PROJ_INFO	//用户创建新的云项目后返回的该新项目信息 (项目id+\t+项目名+\t+项目所有者)
    };