// // 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, 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 为 16bit std::string temp; // 判断是否超过数据包限制大小 一个包 大概0.06MB if (mph->ByteSizeLong() + data->ByteSizeLong() > 65535) { return "超过数据包限制大小,无法构造,长度请低于65535, 或者分包"; } // L // temp.push_back(mph->ByteSizeLong()); if (mph->ByteSizeLong() + data->ByteSizeLong() <= 255) { temp.push_back(0); temp.push_back(mph->ByteSizeLong()); } else { short len = mph->ByteSizeLong() + data->ByteSizeLong(); char LTV_L[2]; memcpy(LTV_L, &len, sizeof(LTV_L)); temp.append(LTV_L); } // T mph->AppendToString(&temp); // V data->AppendToString(&temp); return temp; }