56 lines
1.4 KiB
C++
56 lines
1.4 KiB
C++
//
|
||
// Created by dongl on 23-6-20.
|
||
//
|
||
|
||
#include "IMDataPacket.h"
|
||
|
||
IMDataPacket::IMDataPacket(mp::MP_TYPE type, mp::im::msg_data* data) :
|
||
Mph(type),
|
||
MsgData(data) {
|
||
|
||
}
|
||
|
||
IMDataPacket::IMDataPacket(mp::MP_TYPE type, mp::MP_SUB_TYPE subType,
|
||
mp::MP_SUB_TYPE sessionType, uint64_t messageId,
|
||
time_t time, uint64_t account, const std::string &imMsgData) :
|
||
Mph(type),
|
||
MsgData(subType, sessionType,messageId, time, account, imMsgData) {
|
||
|
||
}
|
||
|
||
IMDataPacket::IMDataPacket(mp::MP_TYPE type, /*mp::MP_SUB_TYPE subType,*/
|
||
uint64_t messageId, time_t time) :
|
||
Mph(type),
|
||
MsgData(messageId, time) {
|
||
}
|
||
|
||
std::string IMDataPacket::packet() {
|
||
// 包体长度
|
||
mph->set_mpb_size(data->ByteSizeLong());
|
||
|
||
// im_data_packet 的 L 为 8 bit
|
||
std::string temp;
|
||
|
||
// 判断是否超过数据包限制大小 一个包 大概0.06MB
|
||
if (mph->ByteSizeLong() + data->ByteSizeLong() > 65535) {
|
||
return "超过数据包限制大小,无法构造,长度请低于65535, 或者分包";
|
||
}
|
||
|
||
/// 顺序 LTV
|
||
// L 设置 T 的大小
|
||
if (mph->ByteSizeLong() <= 255) {
|
||
// 添加 L
|
||
temp.push_back(mph->ByteSizeLong());
|
||
// T 设置 V 的大小
|
||
mph->set_mpb_size(data->ByteSizeLong());
|
||
}
|
||
|
||
// T
|
||
mph->AppendToString(&temp);
|
||
// V
|
||
data->AppendToString(&temp);
|
||
|
||
return temp;
|
||
}
|
||
|