当前位置: 首页 > article >正文

主界面获取个人信息测试服务端方

主界面获取个人信息测试服务端方

前言

上一集我们完成了主界面获取个人信息客户端方的那边的代码,那边的代码还是相当的复杂的,可以多去看一眼,为了我们能够测试得到我们的运行结果,能够让我们看到protobuf和Http的网络通信是怎么工作的,我们这一集就要去完成主界面获取个人信息测试服务端方的代码。

Tips

这个阶段我们编写的服务器是一个用于测试的服务器,(MockServer),并不是正式的服务器。

是用于伪造数据,辅助客户端,完成流程的测试。

前后端交互的桥梁

这个就是我们这个内容前后端交互的重要桥梁!

我们在上一集完成的内容中,我们会构造一个http发到我们的测试服务器那边。那么就要去接收这个请求,我们要去配置这个请求的路由,之后将发送过来的请求送到我们的服务器里面的一个方法来处理我们的请求即可。

这个配置路由我们在HttpServer初始化的时候就要配置好,所以代码放到我们的HttpServer初始化的函数当中即可。

    httpServer.route("/service/user/get_user_info", [=](const QHttpServerRequest& req){
        return this->getUserInfo(req);
    });

getUserInfo

这里我们就要开始完成我们的函数了。

我们还是按照我们的proto文件规定来走

上面是我们的请求,下面使我们的需要构造的响应。

那么我们经过了网络的传输,这个数据给到我们的时候肯定是一个二进制的数据,所以我们必须先反序列化!

当然只需要对body进行序列化即可。

    //解析请求
    bite_im::GetUserInfoReq pbReq;
    pbReq.deserialize(&serializer, req.body());
    LOG() << "[REQ 获取用户信息] requestId=" << pbReq.requestId() << ", loginSessionId=" << pbReq.sessionId();

我们就要构造一个响应进行网络传输。

这里我们要保持请求id的一致,只需要把发送过来的请求id弄上去即可。

构造响应这里有一个复杂的类UserInfo,我们就继续构造一个UserInfo即可!

记得我们的QIcon是不能传输的,所以要用我们之前写的工具函数进行转换!

之后我们就构造好我们的body了!

    //构造响应结构
    bite_im::GetUserInfoRsp pbResp;
    pbResp.setRequestId(pbReq.requestId());
    pbResp.setSuccess(true);
    pbResp.setErrmsg("");

    bite_im::UserInfo userInfo;
    userInfo.setUserId("9527");
    userInfo.setNickname("程序猿");
    userInfo.setDescription("努力敲代码");
    userInfo.setPhone("5201314");
    userInfo.setAvatar(loadFileToByteArray(":/resource/image/groupAvatar.png"));

    pbResp.setUserInfo(userInfo);

当然传输的时候,我们是需要使用二进制的数据进行传输,所以我们就把这个构造的body进行序列化即可。之后按照以下内容进行构造我们的请求头即可。

    QByteArray body = pbResp.serialize(&serializer);

    //构造http响应头数据
    QHttpServerResponse httpResp(body, QHttpServerResponse::StatusCode::Ok);
    httpResp.setHeader("Content-Type", "application/x-protobuf");
    return httpResp;

这样我们的函数就完成了!

总代码

QHttpServerResponse HttpServer::getUserInfo(const QHttpServerRequest &req)
{
    //解析请求
    bite_im::GetUserInfoReq pbReq;
    pbReq.deserialize(&serializer, req.body());
    LOG() << "[REQ 获取用户信息] requestId=" << pbReq.requestId() << ", loginSessionId=" << pbReq.sessionId();

    //构造响应结构
    bite_im::GetUserInfoRsp pbResp;
    pbResp.setRequestId(pbReq.requestId());
    pbResp.setSuccess(true);
    pbResp.setErrmsg("");

    bite_im::UserInfo userInfo;
    userInfo.setUserId("9527");
    userInfo.setNickname("程序猿");
    userInfo.setDescription("努力敲代码");
    userInfo.setPhone("5201314");
    userInfo.setAvatar(loadFileToByteArray(":/resource/image/groupAvatar.png"));

    pbResp.setUserInfo(userInfo);

    QByteArray body = pbResp.serialize(&serializer);

    //构造http响应头数据
    QHttpServerResponse httpResp(body, QHttpServerResponse::StatusCode::Ok);
    httpResp.setHeader("Content-Type", "application/x-protobuf");
    return httpResp;
}

对比

写完前面一集的代码,我们就可以运行了,在运行之前我们对比一下客户端和服务端的代码!

服务端

客户端

可以发现我们的API很乱,没有很对应,当然我们还是要去习惯。

测试

我们测试一下!

可以看到我们的个人头像就不是之前的dog了,说明我们的内容就是成功完成了!

那么这一集就先到这里吧


http://www.kler.cn/a/400172.html

相关文章:

  • 【学习笔记】科学计算
  • 通过 Docker 对 MySQL 做主从复制的时候,因为ip不对导致不能同步。后又因为二进制的偏移量写的不对,导致不能同步的问题
  • 【Android、IOS、Flutter、鸿蒙、ReactNative 】自定义View
  • springboot第82集:消息队列kafka,kafka-map
  • Spark分布式计算中Shuffle Read 和 Shuffle Write的职责和区别
  • 【Pytorch】IPython库中的display函数
  • 第6章-详细设计 6.4归一化
  • Verilog HDL学习笔记
  • JDK、MAVEN与IDEA的安装与配置
  • pytorch的模型load
  • C语言练习.if.else语句
  • 全新UI H5购物商城系统存在前台任意文件上传漏洞
  • 每日一题3239.最少翻转次数使二进制矩阵回文;
  • Elasticsearch-Elasticsearch-Rest-Client(三)
  • django从入门到实战(一)——路由的编写规则与使用
  • CS DAC的Matlab建模与电路设计
  • MSTP知识点
  • 学习笔记026——Redis基本操作命令
  • CSS(8)高级技巧:精灵图,css三角,用户界面,vertical-align属性应用
  • Golang 不常被注意的特性
  • 使用 Python的Pyecharts 绘制词云图
  • torch.is_storage()
  • 部分利用oracle数据字典查询对应信息的语句。
  • 基于Python的招聘信息推荐系统
  • 力扣(leetcode)面试经典150题——27. 移除元素
  • gitlab容器的迁移(部署)并配置自动备份