#ifndef INFO_MSG_H #define INFO_MSG_H #include #include #include #include #include #include struct FileStruct { QString root; QString mid; QString relative; }; struct PropertyData { QString uuid; QString command; QString userAction; QString localPath; QString remotePath; qint32 state; qint32 properE; }; struct InfoMsg { qint32 mark{}; QString command; QString msg; QString fromPath; QString toPath; QString type; quint64 size{}; quint32 permissions{}; QVector listSend; QVector list; QMap mapData; FileStruct fst; QMap> infos; void serialize(QDataStream& data) const { data << mark << command << msg << fromPath << toPath << type << size << permissions; data << static_cast(listSend.size()); for (const auto& item : listSend) { data << item; } data << static_cast(list.size()); for (const auto& item : list) { data << item; } data << static_cast(mapData.size()); for (auto it = mapData.constBegin(); it != mapData.constEnd(); ++it) { data << it.key(); data << it.value().uuid << it.value().command << it.value().userAction << it.value().localPath << it.value().remotePath << it.value().state << it.value().properE; } data << fst.root << fst.mid << fst.relative; data << static_cast(infos.size()); for (auto it = infos.constBegin(); it != infos.constEnd(); ++it) { data << it.key(); data << static_cast(it.value().size()); for (const auto& fileStruct : it.value()) { data << fileStruct.root << fileStruct.mid << fileStruct.relative; } } } void deserialize(QDataStream& data) { data >> mark >> command >> msg >> fromPath >> toPath >> type >> size >> permissions; qint32 listSize; data >> listSize; listSend.resize(listSize); for (auto& item : listSend) { data >> item; } data >> listSize; list.resize(listSize); for (auto& item : list) { data >> item; } qint32 mapSize; data >> mapSize; mapData.clear(); for (int i = 0; i < mapSize; ++i) { QString key; PropertyData prop; data >> key; data >> prop.uuid >> prop.command >> prop.userAction >> prop.localPath >> prop.remotePath >> prop.state >> prop.properE; mapData.insert(key, prop); } data >> fst.root >> fst.mid >> fst.relative; data >> mapSize; infos.clear(); for (int i = 0; i < mapSize; ++i) { QString key; data >> key; qint32 vectorSize; data >> vectorSize; QVector fileVector; fileVector.resize(vectorSize); for (int j = 0; j < vectorSize; ++j) { data >> fileVector[j].root >> fileVector[j].mid >> fileVector[j].relative; } infos.insert(key, fileVector); } } }; QDataStream& operator<<(QDataStream& data, const InfoMsg& info); QDataStream& operator>>(QDataStream& data, InfoMsg& info); #endif // INFO_MSG_H