IM/MP/IMDataPacket.cpp
2023-07-01 20:22:27 +08:00

57 lines
1.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// 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(subType, 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;
}