-
该类作为客户端与服务器通信的协议
-
自带的构造函数将添加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
};
//获取处理后的包数据
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+项目所有者)
};