mirror of
https://gitee.com/Zhaoxin59/my-chat_-client.git
synced 2026-02-14 00:51:48 +08:00
add sendMessage function
This commit is contained in:
@ -30,6 +30,7 @@ namespace network {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
void NetClient::initWebSocket()
|
||||
{
|
||||
//准备好所需要的信号槽
|
||||
@ -283,4 +284,87 @@ namespace network {
|
||||
emit dataCenter->getRecentMessageListDone(chatSessionId);
|
||||
});
|
||||
}
|
||||
|
||||
//此处的extraInfo,可以用来传递扩展信息,尤其是对文件消息来说,通过这个字段表示“文件名”
|
||||
//其他类型的消息暂时不涉及,就直接设置为空,如果后续有消息类型需要,都可以给这个参数,赋予一定的特殊意义
|
||||
void NetClient::sendMessage(const QString& loginSessionId, const QString& chatSessionId,
|
||||
model::MessageType messageType, const QByteArray& content, const QString& extraInfo)
|
||||
{
|
||||
//通过protobuf 构造 body
|
||||
bite_im::NewMessageReq req;
|
||||
req.setRequestId(makeRequestId());
|
||||
req.setSessionId(loginSessionId);
|
||||
req.setChatSessionId(chatSessionId);
|
||||
|
||||
//构造MessageContent
|
||||
bite_im::MessageContent messageContent;
|
||||
if (messageType == MessageType::TEXT_TYPE) {
|
||||
messageContent.setMessageType(bite_im::MessageTypeGadget::MessageType::STRING);
|
||||
|
||||
bite_im::StringMessageInfo stringMessageInfo;
|
||||
stringMessageInfo.setContent(content);
|
||||
messageContent.setStringMessage(stringMessageInfo);
|
||||
}
|
||||
else if (messageType == MessageType::IMAGE_TYPE) {
|
||||
messageContent.setMessageType(bite_im::MessageTypeGadget::MessageType::IMAGE);
|
||||
|
||||
bite_im::ImageMessageInfo imageMessageInfo;
|
||||
imageMessageInfo.setFileId("");
|
||||
imageMessageInfo.setImageContent(content);
|
||||
messageContent.setImageMessage(imageMessageInfo);
|
||||
}
|
||||
else if (messageType == MessageType::FILE_TYPE) {
|
||||
messageContent.setMessageType(bite_im::MessageTypeGadget::MessageType::FILE);
|
||||
|
||||
bite_im::FileMessageInfo fileMessageInfo;
|
||||
fileMessageInfo.setFileId("");
|
||||
fileMessageInfo.setFileSize(content.size());
|
||||
fileMessageInfo.setFileName(extraInfo);
|
||||
fileMessageInfo.setFileContents(content);
|
||||
messageContent.setFileMessage(fileMessageInfo);
|
||||
}
|
||||
else if (messageType == MessageType::SPEECH_TYPE) {
|
||||
messageContent.setMessageType(bite_im::MessageTypeGadget::MessageType::SPEECH);
|
||||
|
||||
bite_im::SpeechMessageInfo speechMessageInfo;
|
||||
speechMessageInfo.setFileId("");
|
||||
speechMessageInfo.setFileContents(content);
|
||||
messageContent.setSpeechMessage(speechMessageInfo);
|
||||
}
|
||||
else {
|
||||
LOG() << "错误的消息类型 messageType= " << messageType;
|
||||
}
|
||||
req.setMessage(messageContent);
|
||||
|
||||
//序列化操作
|
||||
QByteArray body = req.serialize(&serializer);
|
||||
LOG() << "发送消息->发送请求 requestId= " << req.requestId() << ", loginSessionId=" << req.sessionId() <<
|
||||
", chatSessionId= " << req.chatSessionId() << ", messageType=" << req.message().messageType();
|
||||
|
||||
//发送HTTP请求
|
||||
QNetworkReply* resp = this->sendHttpRequest("/service/message_transmit/new_message", body);
|
||||
|
||||
//处理HTTP响应
|
||||
connect(resp, &QNetworkReply::finished, this, [=]() {
|
||||
//针对响应结果,进行解析
|
||||
bool ok = false;
|
||||
QString reason;
|
||||
auto pbResp = this->handleHttpResponse<bite_im::NewMessageRsp>(resp, &ok, &reason);
|
||||
|
||||
//判定响应是否正确
|
||||
if (!ok) {
|
||||
LOG() << "发送消息->处理出错 reason= " << reason;
|
||||
return;
|
||||
}
|
||||
|
||||
//此处只是记录成功和失败,不需要把内写入到DataCenter中
|
||||
|
||||
|
||||
//通知调用者,响应处理完毕
|
||||
emit dataCenter->sendMessageDone(messageType, content, extraInfo);
|
||||
|
||||
//打印日志
|
||||
LOG() << "发送消息->响应处理完毕 requestId=" << pbResp->requestId();
|
||||
});
|
||||
}
|
||||
} //end namespace network
|
||||
@ -84,6 +84,8 @@ namespace network {
|
||||
void getChatSessionList(const QString& loginSessionId);
|
||||
void getApplyList(const QString& loginSessionId);
|
||||
void getRecentMessageList(const QString& loginSessionId, const QString& chatSessionId);
|
||||
void sendMessage(const QString& loginSessionId, const QString& chatSessionId, model::MessageType messageType,
|
||||
const QByteArray& content, const QString& extraInfo);
|
||||
private:
|
||||
model::DataCenter* dataCenter;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user