Added the function of obtaining user information on the network

This commit is contained in:
xyz
2025-06-11 11:21:08 +08:00
parent 68cd53a80c
commit 24536ca80f
6 changed files with 116 additions and 28 deletions

View File

@ -74,48 +74,73 @@ namespace network {
return "R" + QUuid::createUuid().toString().sliced(25, 12);
}
//通过这个函数把发送HTTP请求的操作封装一下
QNetworkReply* NetClient::sendHttpRequest(const QString& apiPath, const QByteArray& body)
{
//构造出HTTP请求
QNetworkRequest httpReq;
httpReq.setUrl(QUrl(HTTP_URL + apiPath));
httpReq.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-protobuf");
//发起HTTP请求
QNetworkReply* httpResp = httpClient.post(httpReq, body);
return httpResp;
}
//在这个函数内部,完成具体的网络通信即可
void NetClient::getMyself(const QString& loginSessionId)
void NetClient::getMyself(const QString& loginSessionId)
{
//构造出HTTP请求body部分
bite_im::GetUserInfoReq req;
req.setRequestId(makeRequestId());
req.setSessionId(loginSessionId);
QByteArray body = req.serialize(&serializer);
LOG() << "获取个人信息: requestId=" << req.requestId() << ", loginSessionId=" << loginSessionId;
LOG() << "获取个人信息->发送请求 requestId=" << req.requestId() << ", loginSessionId=" << loginSessionId;
//构造出HTTP请求
QNetworkRequest httpReq;
httpReq.setUrl(QUrl(HTTP_URL + "/service/user/get_user_info"));
httpReq.setHeader(QNetworkRequest::ContentTypeHeader, "application/x-protobuf");
//发起HTTP请求
QNetworkReply* httpResp = httpClient.post(httpReq, body);
QNetworkReply* httpResp = sendHttpRequest("/service/user/get_user_info", body);
//通过信号槽,获取到当前的响应
connect(httpResp, &QNetworkReply::finished, this, [=]() {
if (httpResp->error() != QNetworkReply::NoError) {
//说明HTTP请求出错了
LOG() << "HTTP error: " << httpResp->errorString();
httpResp->deleteLater();
return;
}
//说明拿到了body
QByteArray respBody = httpResp->readAll();
//if (httpResp->error() != QNetworkReply::NoError) {
// //说明HTTP请求出错了
// LOG() << "HTTP error: " << httpResp->errorString();
// httpResp->deleteLater();
// return;
//}
////说明拿到了body
//QByteArray respBody = httpResp->readAll();
//针对body进行反序列化,解析成对象
bite_im::GetUserInfoRsp respObj;
respObj.deserialize(&serializer, respBody);
////针对body进行反序列化,解析成对象
//bite_im::GetUserInfoRsp respObj;
//respObj.deserialize(&serializer, respBody);
//判定一下业务上是否出错
if (!respObj.success()) {
LOG() << "requestId= " << respObj.requestId() << ", errmsg=" << respObj.errmsg();
httpResp->deleteLater();
return;
}
////判定一下业务上是否出错
//if (!respObj.success()) {
// LOG() << "requestId= " << respObj.requestId() << ", errmsg=" << respObj.errmsg();
// httpResp->deleteLater();
// return;
//}
//继续处理后续的业务逻辑
//获取http回复
bool ok = false;
QString reason;
auto resp = handleHttpResponse<bite_im::GetUserInfoRsp>(httpResp, &ok, &reason);
//判定响应是否正确
if (!ok) {
LOG() << "获取个人信息->出错 requestId= " << req.requestId() << ", reason= " << reason;
return;
}
//把响应的数据保存到DataCenter
dataCenter->resetMyself(resp);
//通知调用逻辑,响应已经处理完成了,仍然通过信号槽通知
emit dataCenter->getMyselfDone();
//打印日志
LOG() << "获取个人信息->响应处理完毕 requestId" << req.requestId();
});
}
} //end namespace network